Laravel Passport调用createToken未返回哈希令牌仅返回数据库对象求助
你遇到的这个问题90%以上的概率是User模型中引入的HasApiTokens trait来源错误,默认新建Laravel项目预引入的是Sanctum组件的同名trait,和Passport的trait逻辑完全不同,才会导致createToken返回的结果没有accessToken属性,你可以按照以下步骤修复:
第一步:修正User模型的trait引入
找到app/Models/User.php文件,调整头部的引用代码,替换掉Sanctum的HasApiTokens:
// 注释或删除原Sanctum的错误引用 // use Laravel\Sanctum\HasApiTokens; // 替换为Passport的对应trait use Laravel\Passport\HasApiTokens; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // 原有模型其他逻辑保持不变 }
第二步:清理缓存生效配置
执行以下命令清空项目缓存,避免旧配置干扰:
php artisan config:clear php artisan cache:clear composer dump-autoload
可选优化(Passport 11.x及以上版本适用)
如果你使用的是Passport 11.x及以上的版本,AuthServiceProvider中的Passport::routes()配置已经不需要手动添加,可以直接删除该行,Passport会自动注册所需的路由。
修改完成后你原来的控制器代码不需要改动,$user->createToken('Laravel Password Grant Client')->accessToken就能正常返回可用于接口校验的明文哈希令牌了。
内容的提问来源于stack exchange,提问作者Rifat Al- Ashwad
相关产品推荐
相关产品推荐

