我可以在一个模型中使用两个守卫吗?

Can I use two guards within one model?

我需要使用一种模型以两种不同的方式对用户进行身份验证。是否可以定义两个守卫并选择更喜欢的一个,例如在控制器层面?

也许还有更好的方法来实现 laravel?不胜感激。

是的,这是可能的。您应该创建两个具有分配路由的不同 LoginControllers,创建两个不同的 Auth 中间件,并且可能还稍微更改 RedirectIfAuthenticated 中间件。

在两个 LoginController 中,你应该像这样定义你的守卫:

protected function guard()
{
    return Auth::guard('admin');
}

如果你想为你的守卫分离路由,而不是在 RedirectIfAuthenticated 中间件中,你应该为两个守卫定义重定向

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {

        if($guard == 'admin') return redirect('/admin');
        return redirect('/');
    }

    return $next($request);
}