【发布时间】:2020-02-06 06:53:25
【问题描述】:
我将这个包用于我的 Laravel 后端项目的“jwt-auth”,这里是包的链接:
https://jwt-auth.readthedocs.io/en/develop/
我有 2 个中间件,我将其命名为租户和 JWT,当我的用户尝试登录应用程序时,他必须发送公司代码,因此我的中间件租户从特定的连接数据库客户端中挑选信息并且一切正常很好。
但是当我一起使用 2 个中间件时,他给了我一个错误,我没有用户表。他是对的,因为当我从问题中进行搜索时,我发现包在我的所有 2 个中间件之前执行了一个函数:
/**
* Get the currently authenticated user.
*
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function user()
{
// MODIFICAÇÃO CUSTOMIZADA DA FUNÇÃO USER
if ($this->user !== null) {
return $this->user;
}
if ($this->jwt->setRequest($this->request)->getToken() &&
($payload = $this->jwt->check(true)) &&
$this->validateSubject()
) {
return $this->user = $this->provider->retrieveById($payload['sub']);
}
}
如果我评论这行 "return $this->user = $this->provider->retrieveById($payload['sub']);",问题就解决了,但这是不是一个好习惯。这个错误的主要原因是这个函数在我的租户中间件之前执行,在租户中间件尝试连接的数据库中没有用户表。
文件名是 tymon\jwt-auth\src** 中的 **JWT_GUARD.php,我认为这是我必须更改的配置
来自 laravel 的 config/auth.php
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
这里:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
【问题讨论】: