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
相关产品推荐
相关产品推荐

