我一直在开发基于多身份验证的应用程序,我需要根据用户的防护重定向到logout
上的动态位置。问题是当我尝试检查当前的身份验证防护时;它总是返回false。我已覆盖默认LoginController
中的注销功能。
LoginController.php
class LoginController extends Controller
{
use AuthenticatesUsers;
public function logout()
{
if (Auth::guard('manager')->check()) {
Auth::logout();
return redirect('/manager/login');
}
if (Auth::guard('employee')->check()) {
Auth::logout();
return redirect('/login');
}
Auth::logout();
return redirect('/login');
}
public function __construct()
{
$this->middleware('guest')->except('logout');
$this->middleware('guest:manager')->except('logout');
}
}
答案 0 :(得分:2)
使用laravel本机身份验证,没有其他解决方案,只能循环遍历所有警卫以找到所需的警卫。
您可以使其更加“干净”和动态
public function logout()
{
$guards = ['manager', 'employee', ''];
foreach ($guards as $guard) {
if(Auth::guard($guard)->check()) {
Auth::guard($guard)->logout();
return $this->redirectLoggedOut($guard);
}
}
return redirect('/login');
}
public function redirectLoggedOut($guard)
{
switch($guard) {
case 'manager':
return redirect('/manager/login');
default:
return redirect('/login');
}
}