如何在LoginController中检查当前防护?

时间:2019-09-05 10:48:54

标签: php laravel authentication laravel-6

我一直在开发基于多身份验证的应用程序,我需要根据用户的防护重定向到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');
    }
}

1 个答案:

答案 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');
    }
}