我想根据用户的角色将用户重定向到不同的路线。我的应用程序中有两个安全区域," admin"和"仪表板"。我想检查用户是否经过身份验证,然后重定向到预期,但如果用户有角色编辑器,则应将其重定向到仪表板,否则如果他有角色,则应重定向到管理区域。
我在登录时使用了AuthenticatesAndRegistersUsers类。我在我的自定义控制器上有这个:
/**
* The default redirecTo path.
*
*/
protected $redirectTo = '/dashboard';
因此,当用户通过身份验证时,它将被重定向到仪表板,但我想检查目标URL是否在管理组路由上,如果用户具有管理员角色,则应将其重定向到管理区域。
我正在使用此中间件重定向到登录:
public function handle($request, Closure $next)
{
if ($this->auth->guest())
{
if ($request->ajax())
{
return response('Unauthorized.', 401);
}
else
{
return redirect()->guest('auth/login');
}
}
return $next($request);
}
答案 0 :(得分:7)
您可以覆盖redirectPath
中特征使用的AuthController
方法,以注入您需要的逻辑。像这样:
/**
* Get the post register / login redirect path.
*
* @return string
*/
public function redirectPath()
{
// Logic that determines where to send the user
if (\Auth::user()->type == 'admin') {
return '/admin';
}
return '/dashboard';
}
修改强>
Laravel在AuthenticatesAndRegistersUsers
特征中使用以下声明在成功登录后重定向用户:
return redirect()->intended($this->redirectPath());
这会尝试将用户重定向到之前尝试过的网址。
如果您需要在用户登录后将其重定向到正确的位置,最好通过向身份验证中间件添加更多逻辑来实现。
答案 1 :(得分:2)
另一种方法是覆盖
authenticated
方法
public function authenticated()
{
if(Auth::check()) {
if(\Auth::user()->hasRole('Super Admin')) {
return redirect('/admin-dashboard');
} else {
return redirect('/user-dashbaord');
}
}
}
答案 2 :(得分:0)
我用这个。您还需要修改中间件 RedirectIfAuthenticated ,以便它不会回家。只是针对不同用户的信息中心。
public function authenticated()
{
if($request->user()->hasRole('admin'))
{
// return redirect()->intended(route('admin.index'));
return redirect()->route('admin.index');
}
if($request->user()->hasRole('super'))
{
return redirect()->route('super.index');
}
if($request->user()->hasRole('officer'))
{
return redirect()->route('officer.index');
}
}