首页 > 解决方案 > Laravel RedirectIfAuthenticated

问题描述

我有问题,当用户使用 laravel 6 中的中间件按角色登录到他们的仪表板时,我试图重定向用户。但我被困在这种情况下无法弄清楚问题出在哪里。请帮忙,谢谢。

每个角色都有这个路由web.php

Route::group([ 'as'=>'user.', 'prefix'=>'user', 'namespace'=>'User', 'middleware'=>['auth','user']],
    function(){
        Route::get('dashboard', 'DashboardController@index')->name('dashboard');
});

中间件看起来像

public function handle($request, Closure $next)
    {
        if (Auth::check() && Auth::user()->role->id == 3 ) {
            return $next($request);
        }else{
            return redirect()->route('login');
        }
    }

重定向IfAuthenticated

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check() && Auth::user()->role->id == 1 ) {
            return redirect()->route('admin.dashboard');
        }elseif (Auth::guard($guard)->check() && Auth::user()->role->id == 2) {
            return redirect()->route('author.dashboard');
        }elseif (Auth::guard($guard)->check() && Auth::user()->role->id == 3) {
            return redirect()->route('user.dashboard');
        }else{
            
              return $next($request);
        }

登录控制器

 public function __construct()
    {
        if (Auth::check() && Auth::user()->role->id == 1  ) {
            $this->redirectTo = route('admin.dashboard');
        }elseif (Auth::check() && Auth::user()->role->id == 2  ) {
            $this->redirectTo = route('author.dashboard');
        }elseif (Auth::check() && Auth::user()->role->id == 3  ) {
            $this->redirectTo = route('user.dashboard');
        } else {
            $this->middleware('guest')->except('logout');
        }


        
    }

标签: phplaravellaravel-6

解决方案


您的第一个中间件检查用户是否已登录以及他是否具有角色 3。

也许将其更改为:

public function handle($request, Closure $next)
    {
        if (Auth::check()) {
            return $next($request);
        }else{
            return redirect()->route('login');
        }
    }

推荐阅读