Laravel Passport调用createToken未将令牌存入oauth_access_tokens表问题
问题原因
核心原因是你的App\Models\User模型引入了错误的HasApiTokens trait:
- Laravel 新版本默认预装了Sanctum认证组件,默认User模型会引入
Laravel\Sanctum\HasApiTokenstrait,这个trait提供的createToken方法会将令牌存储到personal_access_tokens表中,返回的令牌结构也是你接口返回的数组格式。 - 你要使用Passport的令牌生成逻辑,需要替换为Passport提供的同名trait,它的
createToken方法才会将令牌写入oauth_access_tokens表。
修复步骤
- 修改
App\Models\User文件的trait引用
找到User类顶部的引用代码,将:
use Laravel\Sanctum\HasApiTokens;
替换为Passport的对应trait:
use Laravel\Passport\HasApiTokens;
- 确认API守卫配置
打开config/auth.php,检查guards节点下的api守卫驱动是否设置为passport:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', 'hash' => false, ], ],
- 清理缓存验证效果
运行命令清理配置缓存:
php artisan config:clear
重新调用注册接口,此时生成的令牌会自动写入oauth_access_tokens表,返回的accessToken也会是Passport生成的标准JWT格式长字符串。
内容的提问来源于stack exchange,提问作者Barraaa
相关产品推荐
相关产品推荐

