我的'用户'表有一个'角色'列,当用户注册或登录时,我希望根据他们的角色列重定向它们。我怎样才能做到这一点?
我将此函数添加到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') ;
}
}
如果您使用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中引入)来管理角色逻辑。
在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';
}
}
你可以在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);
}