You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel集成JWT认证遇JWTException:Token缺失异常排查

问题原因及解决办法

1. JWT配置文件未指定自定义用户模型

默认config/jwt.php里的'user'配置项指向App\Models\User,你删除该模型后未更新配置,导致JWTAuth验证时找不到对应用户模型,进而抛出误导性的“Token absent”错误。

解决办法:
打开config/jwt.php,修改'user'配置项为你的自定义模型路径:

'user' => App\Models\Pharmacist::class,

2. 中间件中未正确传递Token到JWTAuth实例

如果你手动获取了$token但直接调用JWTAuth::toUser(),JWTAuth会默认从请求头(如Authorization)自动取Token,而非使用你已拿到的$token,这就会触发“Token required”错误。

解决办法:
调用toUser()前先通过setToken()传入已获取的Token:

$user = JWTAuth::setToken($token)->toUser();

3. 认证守卫配置未更新

Laravel默认认证守卫依赖User模型,删除该模型后需在config/auth.php中更新守卫配置,指定使用Pharmacist模型。

解决办法:

  • 在providers数组中添加自定义模型的provider:
'providers' => [
    // ... 其他配置
    'pharmacists' => [
        'driver' => 'eloquent',
        'model' => App\Models\Pharmacist::class,
    ],
],
  • 在guards数组中添加对应守卫,并设为默认守卫:
'guards' => [
    // ... 其他配置
    'pharmacist' => [
        'driver' => 'jwt',
        'provider' => 'pharmacists',
    ],
],
'defaults' => [
    'guard' => 'pharmacist',
    'passwords' => 'pharmacists',
],

4. JWTSubject接口方法实现不规范

需确保Pharmacist模型中JWTSubject的两个方法实现符合要求:

  • getJWTIdentifier()必须返回模型主键(通常是id字段)
  • getJWTCustomClaims()必须返回数组(可空数组)

若方法返回值不符合要求,生成的Token无法正确关联用户,验证时会触发异常。

检查示例:

class Pharmacist extends Model implements JWTSubject
{
    // ... 其他代码

    public function getJWTIdentifier()
    {
        return $this->getKey(); // 正确返回主键
    }

    public function getJWTCustomClaims()
    {
        return []; // 正确返回数组
    }
}

内容的提问来源于stack exchange,提问作者Ahmed Ajajeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:12:08