laravel 5根据用户的角色在登录后重定向用户

问题描述 投票:4回答:4

我的'用户'表有一个'角色'列,当用户注册或登录时,我希望根据他们的角色列重定向它们。我怎样才能做到这一点?

laravel laravel-5
4个回答
11
投票

我将此函数添加到AuthController.php,并且所有内容都是神奇地修复的

public function authenticated($request , $user){
    if($user->role=='super_admin'){
        return redirect()->route('admin.dashboard') ;
    }elseif($user->role=='brand_manager'){
        return redirect()->route('brands.dashboard') ;
    }
}

4
投票

如果您使用Laravel提供的身份验证系统,您可以覆盖redirectPath中的Auth\AuthController方法。

例如,这会将角色为“admin”的用户重定向到/admin,将任何其他用户重定向到/account

public function redirectPath()
{
    if (\Auth::user()->role == 'admin') {
        return "/admin";
        // or return route('routename');
    }

    return "/account";
    // or return route('routename');
}

您还可以使用Laravel Authorization(在5.1.11中引入)来管理角色逻辑。


3
投票

在laravel 5.7中没有AuthController.php所以你必须去Controllers \ Auth \ LoginController.php并添加以下函数,

如果重定向路径需要自定义生成逻辑,则可以定义redirectTo方法而不是redirectTo属性

protected function redirectTo()
{

    if($user->role=='super_admin'){
        return '/path1';
    }elseif($user->role=='brand_manager'){
        return '/path2';
    }   

}

2
投票

你可以在handle函数里面的Middleware RedirectIfAuthenticated.php中处理请求,如下所示:

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  string|null  $guard
 * @return mixed
 */
public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        if (Auth::user()->role == 'admin') {
            return redirect('/admin');
        }else{
            return redirect('/');
        }
    }

    return $next($request);
}
© www.soinside.com 2019 - 2024. All rights reserved.