DEV Community

Cover image for Filament: Modify login or logout response
Syahril Zulkefli
Syahril Zulkefli

Posted on

Filament: Modify login or logout response

If you would like to modify Filament's default login and logout response, follow these steps.

Login Response

In my application, I want to make sure the user has at least one vehicle before they can use it, so I will redirect them to the form after they log in.

The first step is to create a new file, /app/Http/Responses/LoginResponse.php and add the logic to it.

<?php

namespace App\Http\Responses;

use App\Filament\App\Resources\VehicleResource;
use Filament\Http\Responses\Auth\Contracts\LoginResponse as Responsable;
use Filament\Pages\Dashboard;
use Illuminate\Http\RedirectResponse;
use Livewire\Features\SupportRedirects\Redirector;

class LoginResponse implements Responsable
{
    /**
     * Create an HTTP response that represents the object.
     *
     * @param \Illuminate\Http\Request $request
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function toResponse($request): Redirector|RedirectResponse
    {
        if ($request->user()->vehicles()->count() <= 0) {
            return redirect()->to(VehicleResource::getUrl('create'));
        }

        return redirect()->to(Dashboard::getUrl());
    }
}
Enter fullscreen mode Exit fullscreen mode

Next, we have to register the implementation in our AppServiceProvider.

use App\Http\Responses\LoginResponse;
use Filament\Http\Responses\Auth\Contracts\LoginResponse as LoginResponseContract;

/**
 * Register any application services.
 */
public function register(): void
{
    $this->app->bind(
        LoginResponseContract::class,
        LoginResponse::class
    );
}
Enter fullscreen mode Exit fullscreen mode

Login Response

Since I have multiple panels in my application, I want to redirect the user to a specific login form when logged out.

For the logout, create a new file, /app/Http/Responses/LogoutResponse.php and add some logic to it.

<?php

namespace App\Http\Responses;

use Filament\Http\Responses\Auth\Contracts\LogoutResponse as Responsable;
use Illuminate\Http\RedirectResponse;

class LogoutResponse implements Responsable
{
    public function toResponse($request): RedirectResponse
    {
        // change this to your desired route
        return redirect()->route('filament.account.auth.login');
    }
}
Enter fullscreen mode Exit fullscreen mode

Don't forget to register the implementation in your AppServiceProvider.

use App\Http\Responses\LogoutResponse;
use Filament\Http\Responses\Auth\Contracts\LogoutResponse as LogoutResponseContract;

/**
 * Register any application services.
 */
public function register(): void
{
    ...
    ...

    $this->app->bind(
        LogoutResponseContract::class,
        LogoutResponse::class
    );
}
Enter fullscreen mode Exit fullscreen mode

That should do the trick.

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs