我的'用户'表有一个'角色'列,当用户注册或登录时,我希望根据他们的角色列重定向它们。我怎么能这样做?
答案 0 :(得分: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') ;
}
}
答案 1 :(得分: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中引入)来管理角色逻辑。
答案 2 :(得分: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';
}
}
答案 3 :(得分: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);
}
答案 4 :(得分:0)
我写这是为了防止有人认为有用。如果您想始终重定向,而不仅仅是登录,我会在web.php上这样重定向:
Route::get('/home', function () {
switch(\Illuminate\Support\Facades\Auth::user()->role){
case 'admin':
return redirect(route('home.admin'));
break;
case 'employee':
return redirect(route('home.employee'));
break;
default:
return '/login';
break;
}
});
Route::get('/home/admin', 'HomeController@indexAdmin')->name('home.admin');
Route::get('/home/employee', 'HomeController@indexEmployee')->name('home.employee');
因此,每当他们单击/ home时,都将重定向到您想要的url,您也可以使用'/'。