如何检查 LoginController 中的当前守卫?

How to check current guard in LoginController?

我一直在开发基于多重身份验证的应用程序,我需要根据用户的保护重定向到 logout 上的动态位置。问题是当我尝试检查当前的 auth guard 时;它总是 returns 错误。我已经覆盖默认 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');
    }
}

使用laravel native auth,除了循环遍历所有守卫以找到您需要的那个,别无他法。

你可以让它更"clean"和动态

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