Filament v4 自定义登入、登出后的跳转

在多面板或基于角色的应用程序中,默认重定向可能会感觉笨拙。常见需求包括:

  • 登录后→将用户重定向到他们尝试访问的页面或仪表板
  • 注销后→将用户重定向回您的公共主页
  • 意图保留 → 记住用户在登录屏幕停止时的目标页面

第 1 步:自定义 LoginResponse

创建 app/filament/dashboard/pages/auth/LoginResponse.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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());
}
}
  • 继承 Filament’s contract
  • 检查 session 中的 intended_url
  • 返回到 panel home

第 2 步:自定义 LogoutResponse

创建 app/filament/dashboard/pages/auth/LogoutResponse.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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');
}
}

第 3 步:在服务提供商中注册

编辑 AppServiceProvider:

1
2
3
4
5
6
7
8
9
10
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);
}

通过将 Filament 的默认响应与您自己的响应交换,您可以确保跨仪表板、登录和注销的无缝体验。

【转自】Custom Login & Logout Redirects in Filament v4