Laravel Passport createToken方法无法返回access_token的问题求助(配置无误仍失效)
解决Laravel Passport createToken不返回access_token的问题
我来帮你搞定这个问题!你现在得到的响应其实是PersonalAccessToken模型的序列化结果,而不是你需要的明文access_token,这大概率是Passport版本差异或者调用方式的问题,下面分情况给你解决办法:
情况1:使用Passport 10.x及以上版本
从Passport 10.x开始,官方为了安全性调整了createToken()的返回逻辑:它不再直接返回包含明文token的对象,而是返回PersonalAccessToken实例,明文token只能通过plainTextToken方法获取(因为数据库里存的是哈希后的token,明文token仅在创建时可获取一次)。
修改你的控制器代码:
$appUser = User::create([ 'name' => $user->name, 'email' => $user->email, 'password' => Hash::make(Str::random(8)), ]); // 先创建token实例,再获取明文token $tokenInstance = $appUser->createToken('Token Name'); return $tokenInstance->plainTextToken;
情况2:使用Passport 9.x及以下版本
如果你的Passport是旧版本,先检查几个关键点:
- 确保你的
User模型正确引入了HasApiTokenstrait:use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // 其他模型代码 } - 确认已经完成Passport的初始化操作:
php artisan passport:install php artisan migrate - 尝试清除配置和缓存,避免配置未生效:
php artisan config:clear php artisan cache:clear
如果以上都没问题,再调整代码确保正确获取accessToken:
$passportToken = $appUser->createToken('Token Name')->accessToken; return response()->json(['access_token' => $passportToken]);
问题根源说明
你当前收到的响应是PersonalAccessToken模型的JSON序列化结果,说明你直接返回了createToken()的返回值(模型实例),而没有提取其中的token字符串。新版本Passport移除了accessToken属性,改用方法返回明文token,这是核心原因。
内容的提问来源于stack exchange,提问作者Eahiya
相关产品推荐
相关产品推荐

