Laravel Sanctum createToken方法错误插入自定义tokens表问题排查
Laravel Sanctum 令牌存储表错误问题解决
问题原因
你在User模型中自定义的tokens()关联方法覆盖了Sanctum自带的同名关联。Laravel Sanctum的HasApiTokens trait内部已经定义了一个tokens()方法,该方法关联的是PersonalAccessToken模型(对应personal_access_tokens表),用于管理Sanctum签发的API令牌。当你自己定义了同名的tokens()方法后,Sanctum的默认关联被覆盖,调用createToken()时就会使用你自定义的Token模型和tokens表,导致插入表错误。
解决步骤
- 重命名自定义关联方法:将User模型中的
tokens()改为不会冲突的名称,比如thirdPartyTokens(),这样既保留你自己的第三方令牌关联,又不会影响Sanctum的正常工作:public function thirdPartyTokens() { return $this->hasMany(Token::class); } - 确认Sanctum Trait已正确引入:检查User模型顶部是否引入了
HasApiTokenstrait,这是Sanctum实现API令牌功能的核心依赖:use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // ... 其他模型代码 } - 清除应用缓存(可选):如果修改后问题仍存在,执行以下命令清除Laravel的配置和模型缓存,确保关联关系生效:
php artisan optimize:clear
内容的提问来源于stack exchange,提问作者SaladeDeFruits
相关产品推荐
相关产品推荐

