Laravel 如何根据目标用户的角色将其重定向到不同的路由?
我想根据用户的角色将其重定向到不同的路由。我的应用程序中有两个安全区域,“管理员”和“仪表板”。我想检查用户是否经过身份验证,然后重定向到预定的,但若用户有角色编辑器,那个么它应该重定向到仪表板,否则若他有角色admin,那个么应该重定向到admin区域 我正在登录中使用AuthenticatesAndRegistersUsers类。我的自定义控制器上有:Laravel 如何根据目标用户的角色将其重定向到不同的路由?,laravel,laravel-5,Laravel,Laravel 5,我想根据用户的角色将其重定向到不同的路由。我的应用程序中有两个安全区域,“管理员”和“仪表板”。我想检查用户是否经过身份验证,然后重定向到预定的,但若用户有角色编辑器,那个么它应该重定向到仪表板,否则若他有角色admin,那个么应该重定向到admin区域 我正在登录中使用AuthenticatesAndRegistersUsers类。我的自定义控制器上有: /** * The default redirecTo path. * */ protected $redirectTo = '/
/**
* 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);
}
您可以覆盖
AuthController
中trait使用的redirectPath
方法,以注入所需的逻辑。大概是这样的:
/**
* 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());
这将尝试将用户重定向到以前尝试的URL
如果您需要在用户已经登录时将其重定向到正确的位置,那么最好向您的身份验证中间件添加更多逻辑
另一种方法是重写authenticated
方法
我用这个。您还需要修改中间件重定向验证,使其不会路由回家。只是到不同用户的仪表板
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');
}
}
这应该可以,但是如果我想重定向到完整路径呢?例如:用户尝试转到“admin/settings/general”,被重定向到登录,他登录,然后被重定向到/admin,而不是完整路径。默认情况下,Laravel将首先尝试重定向到预期的URL。如果没有,它将返回到此方法。我应该在中间件上设置重定向url?您需要将
redirectPath
方法放入AuthController
中,并根据您的需要修改逻辑。这里的问题似乎是由于委托::routeNeedsRole('admin*',数组('admin'),重定向::guest('auth/login');未正确设置预期url的。
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');
}
}