我正在使用Auth::guard来检查注销控制器中使用的是哪个守卫。如果它是管理员守卫,那么我希望重定向到管理员登录,否则它将转到用户登录。
我的期望是,Auth::guard('admin')会检查该防护是否确实是admin类型的。如果是这样,则继续执行If语句。
然而,它的工作方式并不像我期望的那样。我用dd(Auth::guard())检查我的守卫,它肯定是web守卫。但不管怎样,Auth::guard('admin')仍在让它通过。
我做错了什么?我的假设re Auth::guard是错的吗?非常感谢!
if (Auth::guard('admin') ) {
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect('admin-login');
}
else {
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect('/login');
}发布于 2017-04-28 02:56:25
当你使用Auth::guard('admin')时,它会抓取那个守卫,如果它存在,它不会检查这个守卫当前是否正在被使用。由于该保护确实存在,因此if (Auth::guard('admin') )将始终为真。
要检查该保护当前是否正在使用,您可以执行if(Auth::getDefaultDriver() === 'admin')。当您使用auth:admin中间件时,它会将admin设置为默认保护,因此您可以对照该设置进行检查。
一种更干练的方法是:
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect(Auth::getDefaultDriver() === 'admin' ? '/admin-login' : '/login')https://stackoverflow.com/questions/43664948
复制相似问题