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

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模型正确引入了HasApiTokens trait:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:12:34