0

使用 Laravel 8 Fortify 登录后,我需要一些重定向方面的帮助。我知道如何在登录控制器中执行此操作,但使用 Fortify 时有一个 LoginResponse,我不确定如何执行此操作。我知道在 RouteService Provider 中我可以将其更改为任何位置,但我有一些角色,我想根据角色重定向到不同的仪表板。
在旧的登录控制器中,我会执行以下操作。我如何将其更改为 Fortiy 的 LoginResponse?

public function redirectTo()
    {
            if(Auth::user()->hasRole('admin')){
                $this->redirectTo = route('admin.dashboard');
                return $this->redirectTo;
            }
            if(Auth::user()->hasRole('manager')){
                $this->redirectTo = route('manager.dashboard');
                return $this->redirectTo;
            }
            if(Auth::user()->hasRole('employee')){
                $this->redirectTo = route('employee.dashboard');
                return $this->redirectTo;
            }
    }
4

1 回答 1

0

您可以通过绑定Fortify您自己的LoginResponse. 您可以将以下内容添加到register您的方法中FortifyServiceProvider

use Laravel\Fortify\Contracts\LoginResponse;

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    $this->app->instance(LoginResponse::class, new class implements LoginResponse {
        public function toResponse($request)
        {
            if($request->user()->hasRole('admin')){
                return redirect()->route('admin.dashboard');
            }
            if($request->user()->hasRole('manager')){
                return redirect()->route('manager.dashboard');
            }
            if($request->user()->hasRole('employee')){
                return redirect()->route('employee.dashboard');
            }
        }
    });
}

如果您愿意,您始终可以在实际文件中创建类,而不是使用匿名类


这是Laravel News的一篇文章,其中包含更多细节。

于 2021-11-29T17:14:31.037 回答