重定向Laravel 8 Fortify

m3eecexj  于 2022-12-01  发布在  其他
关注(0)|答案(2)|浏览(161)

我需要一些帮助与重定向后登录与Laravel 8 Fortify。我知道如何做它在登录控制器,但与Fortify有一个LoginResponse,我不知道如何做到这一点。我知道在RouteService提供商,我可以改变它到任何地方,但我有角色,我想重定向到不同的 Jmeter 板的基础上的角色。
在旧的登录控制器中,我将执行以下操作。如何将其更改为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;
            }
    }
oalqel3c

oalqel3c1#

您可以通过绑定自己的LoginResponse实现来自定义Fortify的重定向。您可以将以下内容添加到FortifyServiceProviderregister方法中:

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');
            }
        }
    });
}

如果愿意,您可以始终在实际文件中创建类,而不是使用anonymous class
下面是一个Laravel News post,它将对此进行更详细的介绍。

ivqmmu1c

ivqmmu1c2#

因为你似乎有一个自定义的 Jmeter 板为每个角色,如果是我,而不是改变引擎盖下,如Rwd建议,我会把我的默认重定向页面,在/config/fortify. php作为主目录,是处理重定向的页面.所以你的***route('dashbord')***将决定用户需要哪个 Jmeter 板:

Route::middleware([...])->group(function () {
    Route::get('/dashboard', function () {
          if(Auth::user()->hasRole('admin')){
                $redirectTo = route('admin.dashboard');
            }
            if(Auth::user()->hasRole('manager')){
                $redirectTo = route('manager.dashboard'); 
            }
            if(Auth::user()->hasRole('employee')){
                $redirectTo = route('employee.dashboard'); 
            }
            return redirect()->to($redirectTo);
    })->name('dashboard');
});

相关问题