【发布时间】:2017-07-19 02:22:45
【问题描述】:
我目前正在我的项目中实现 JWT 以支持各种 API。此 API 仅适用于特定的 model。该模型使用我在登录时声明的自定义保护正常工作,我确保已正确应用合同和可验证特征,但 ->byId 方法总是失败。这是我的代码:
namespace App;
class Customer extends Model implements Authenticatable {
use \Illuminate\Auth\Authenticatable;
在我的 jwt.php 文件中,我告诉它使用我的自定义模型:
'user' => \App\Customer::class,
当我执行时:
JWTAuth::fromUser($customer);
我收到了正确的令牌。
然后我使用 Postman 通过将 Authorization: Bearer <token> 标头传递给它来检查它。令牌设置正确。
对于我的受保护路由的后续请求,我会尝试以这种方式对用户进行身份验证:
$token = JWTAuth::parseToken()->authenticate();
->authenticate() 总是失败。
失败的原因是这样的:
if (! $this->auth->byId($id)) {
return false;
}
这总是返回 false。
但是,从$id = $this->getPayload($token)->get('sub'); 调用解析id 确实为我提供了此特定客户的有效ID。再进一步,模型其实是传统模型,其中PK为id列,我的标识符设置正确:
'identifier' => 'id',
为什么EloquentUserAdapter 无法解析我的Customer 的实例?
我搜索了 Google 并尝试了各种修复方法,但都没有结果。任何帮助将不胜感激。
更新
我已经转储了已执行的 SQL 查询,它尝试引用的表是我的默认用户模型,它不是我的自定义模型。这是为什么呢?
更新 2
绑定到 UserInterface 的 tymon.jwt.provider.user 单例正确引用了我的自定义模型:
return $app['tymon.jwt.provider.user'];
提供:
EloquentUserAdapter {#849
#user: Customer {#850
#primaryKey: "id"
#table: "customers"
更新 3
在启动 JWT 用户提供程序时,它知道我要使用哪个模型:
$model = $app->make($this->config('user'));
产量:
Customer {#1040
#primaryKey: "id"
#table: "customers"
【问题讨论】:
-
尝试清除配置缓存 artisan config:clear
-
@michail1982 我试过了,没用。
标签: laravel authentication jwt