我有这个管理中间件:
public function handle($request, Closure $next, $guard = null)
{
if (Auth::check()) {
if ($request->user()->is_admin == 1) {
return $next($request);
}
return redirect('/login');
} else {
return redirect('/login');
}
}
在logincontroller中,如果用户是管理员,则会将其重定向到/admin.
,如果没有重定向到/home.
protected function authenticated()
{
if (auth()->user()->is_admin == 1) {
return redirect('/admin');
} else {
return redirect('/home');
}
}
现在,当管理员登录时,系统会将其重定向到/admin
,但在点击浏览器的后退按钮后,它们会显示在/home
中。我怎么能不将管理员重定向到/home
。 /home
在auth中间件组下。
答案 0 :(得分:1)
原因是因为该用户现在已经过身份验证。
Laravel附带了一个名为WRITE_EXTERNAL
的中间件,它将检查用户是否已经过验证,如果是,则将其重定向到其他地方。
您需要将该中间件编辑为:
RedirectIfAuthenticated
希望这有帮助!
答案 1 :(得分:0)
那是因为你是/admin
。当您按下后退按钮时,它意味着从/login
返回/home
,但在调用视图之前,会检查用户登录的位置。由于您尚未注销并已登录,因此您将被重定向到默认路径Auth
..
在LoginController
文件夹中有一个protected $redirectTo = '/home';
,您可以在其中看到此行
g
如果您想添加逻辑,可以在此处更改。这是默认路径。