【问题标题】:How can I redirect to different views based on user role or privilege in Laravel 8?如何根据 Laravel 8 中的用户角色或权限重定向到不同的视图?
【发布时间】:2021-02-02 06:15:14
【问题描述】:

我把下面的函数放在 LoginController 类中,将用户重定向到不同的视图,登录后我得到了这个 419|expired page

protected function authenticated(Request $request, $user) {
    if ($user->PRIVILEGE == 'C') {
        return redirect()->route('/users');
    } else if ($user->PRIVILEGE == 'B') {
        return redirect('/blog');
    } else {
        return redirect('/');
    }
}

【问题讨论】:

  • 最好使用 Auth 保护。

标签: php laravel web eloquent laravel-8


【解决方案1】:
  1. 首先把它放在你的 LoginController 类中:use Illuminate\Support\Facades\Auth;

  2. 注释掉这一行protected $redirectTo =... 并在 LoginController 类中添加此功能:

    公共函数redirectPath() {

    if(Auth::user()->privilege =='C'){
    
      return '/users';
    }
    if(Auth::user()->privilege=='B'){
    
      return '/blog';
    }    
    

    }

【讨论】:

    【解决方案2】:

    查看app\Http\Middleware\RedirectIfAuthenticated.php 中的handle 方法,您会发现在用户通过身份验证检查后,他们会收到重定向。

    此类旨在将用户重定向到经过身份验证后的正确landing 页面。

        public function handle($request, Closure $next, $guard = null)
        {
            if (Auth::guard($guard)->check()) {
                $user = Auth::user();
                if ($user->PRIVILEGE == 'C') {
                    return redirect()->route('/users');
                }
                if ($user->PRIVILEGE == 'B') {
                    return redirect('/blog');
                } 
                return redirect('/');
            }
    
            return $next($request);
        }
    

    【讨论】:

    • 当使用你的答案时,它会把我带到'/home' 我不想去'/home'。
    • 放入一些 print_r();'s 并查看 $user 是什么以及返回的位置
    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2021-12-11
    • 2015-09-09
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2017-11-29
    相关资源
    最近更新 更多