Laravel 8 Fortify 如何基于用户角色实现登录后自定义跳转
适配Laravel 8 Fortify 角色自定义跳转方案
第一步:创建自定义LoginResponse类
先在app/Http目录下新建Responses文件夹(如果不存在),再在该文件夹内新建LoginResponse.php文件,代码如下:
<?php namespace App\Http\Responses; use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract; use Illuminate\Support\Facades\Auth; class LoginResponse implements LoginResponseContract { public function toResponse($request) { $redirectUrl = $this->getRoleRedirectUrl(); return $request->wantsJson() ? response()->json(['two_factor' => false, 'redirect_url' => $redirectUrl]) : redirect()->intended($redirectUrl); } private function getRoleRedirectUrl() { if(Auth::user()->hasRole('admin')){ return route('admin.dashboard'); } if(Auth::user()->hasRole('manager')){ return route('manager.dashboard'); } if(Auth::user()->hasRole('employee')){ return route('employee.dashboard'); } // 兜底跳转地址,可根据业务调整 return route('home'); } }
第二步:绑定自定义响应到Fortify容器
打开app/Providers/FortifyServiceProvider.php,在boot方法中添加绑定逻辑:
<?php namespace App\Providers; use App\Http\Responses\LoginResponse; use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract; // 其他原有引入保持不变 class FortifyServiceProvider extends ServiceProvider { public function boot() { // 原有Fortify配置逻辑保持不变 $this->app->singleton(LoginResponseContract::class, LoginResponse::class); } }
第三步:功能验证
原有RouteServiceProvider中的全局HOME常量会被自定义逻辑覆盖,不需要额外修改其他配置,直接测试登录即可触发按角色跳转的逻辑。
补充说明:如果你的项目开启了双因素认证,需要按照同样的逻辑自定义
TwoFactorLoginResponse类并绑定,保证双因素校验通过后也能走相同的角色跳转规则。
内容的提问来源于stack exchange,提问作者ToddM
相关产品推荐
相关产品推荐

