đź’ˇ Custom Regulatory Compliance Dashboard See Demo

Custom Login & Logout Redirects in Filament v4

| 5 min read
James Manager

James Manager

Custom Login & Logout Redirects in Filament v4

When working with Filament v4, you often need more control over where users land after they log in or log out. By default:

  • After login → users are sent to the panel’s dashboard
  • After logout → users are redirected to the login page

This works fine for simple apps, but if you’re building a custom web application like an e-commerce platform where Filament is used as the dashboard and the store front is different  or want smoother flows, you’ll likely need custom redirects.

Why Redirects Matter

In multi-panel or role-based apps, default redirects may feel clunky. Common needs include:

  • After Login → Redirect users to the page they tried to visit or their dashboard
  • After Logout → Redirect users back to your public home page
  • Intent Preservation → Remember users’ target page when they were stopped by the login screen

Step 1: Custom LoginResponse

Create app/Filament/Dashboard/Pages/Auth/LoginResponse.php:

<?php

namespace App\Filament\Dashboard\Pages\Auth;

use Illuminate\Http\RedirectResponse;
use Livewire\Features\SupportRedirects\Redirector;
use Filament\Auth\Http\Responses\Contracts\LoginResponse as LoginResponseContract;

class LoginResponse implements LoginResponseContract
{
    public function toResponse($request): RedirectResponse|Redirector
    {
        if (session()->has('intended_url')) {
            $intendedUrl = session()->pull('intended_url');
            return redirect()->to($intendedUrl);
        }

        return redirect()->intended(filament()->getUrl());
    }
}

  • Implements Filament’s contract
  • Checks intended_url in session
  • Falls back to panel home

Step 2: Custom LogoutResponse

Create app/Filament/Dashboard/Pages/Auth/LogoutResponse.php:

<?php

namespace App\Filament\Dashboard\Pages\Auth;

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

class LogoutResponse implements Responsable
{
    public function toResponse($request): RedirectResponse
    {
        return redirect()->route('home');
    }
}

Step 3: Register in Service Provider

Edit AppServiceProvider:

use App\Filament\Dashboard\Pages\Auth\LoginResponse;
use App\Filament\Dashboard\Pages\Auth\LogoutResponse;
use Filament\Auth\Http\Responses\Contracts\LoginResponse as LoginResponseContract;
use Filament\Auth\Http\Responses\Contracts\LogoutResponse as LogoutResponseContract;

public function register(): void
{
    $this->app->bind(LogoutResponseContract::class, LogoutResponse::class);
    $this->app->bind(LoginResponseContract::class, LoginResponse::class);
}

By swapping Filament’s default responses with your own, you ensure a seamless experience across dashboards, logins, and logouts.