做人呢最重要的就是开心

laravel 自定义Guards 无法通过登录

Laravel

问题可能出现的场景 可能就是你没有自己定义登录中间件, 使用默认的auth的时候。

当我在使用了Laravel的默认的用户认证Trait时候, 并且已经在auth配置文件配置了guards。重写该门面方法。

1
2
3
4
protected function guard()
{
return Auth::guard('admin');
}

照理讲当你自定义完该方法, 并且切换了guard之后, 就应该可以了, 可是在并不能通过,尝试了找到了登录验证方法

1
2
3
4
5
6
7
8
9
protected function sendLoginResponse(Request $request)
{
$request->session()->regenerate();

$this->clearLoginAttempts($request);

return $this->authenticated($request, $this->guard()->user())
?: redirect()->intended($this->redirectPath());
}

我通过打印$this->gurad()->user()之后发现已经验证成功, 可是并不能通过, 所以问题出现在哪里呢?登录之后应该会自动跳转到$this->redirectPath();就是你自定义跳转的页面, 查看该页面的路由, 发现我用了auth的中间件,来看一下auth中间件的做的事儿
发现这个参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public function handle($request, Closure $next, ...$guards)
{
$this->authenticate($guards);

return $next($request);
}

/**
* Determine if the user is logged in to any of the given guards.
*
* @param array $guards
* @return void
*
* @throws \Illuminate\Auth\AuthenticationException
*/
protected function authenticate(array $guards)
{
if (empty($guards)) {
return $this->auth->authenticate();
}

foreach ($guards as $guard) {
if ($this->auth->guard($guard)->check()) {
return $this->auth->shouldUse($guard);
}
}

throw new AuthenticationException('Unauthenticated.', $guards);
}

…$gurad可变参数,这里就没错了, 在auth中间还需要认证guard, 这里在authenticate也可以发现,auth中间件默认使用的是auth配置里面default的门面。具体可以查看Auth源码。 这里就不去解释了。但是如果你切换了guard的话, 你就必须加上认证的guards。
在你的路由文件这样写 ->middleware(‘auth:admin’);当然从这个中间件来看, 支持多个guard。 具体在文档的 中间件可以查看

如果文章对你有所帮助,不妨请作者喝杯咖啡