首页 > 解决方案 > 我可以在一个模型中使用两个防护装置吗?

问题描述

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

另外,也许有更好的方法来使用 laravel 实现它?将不胜感激任何想法。

标签: laravellaravel-authentication

解决方案


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

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

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

推荐阅读