You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:18:00