Laravel8 Passport调用createToken报1013及个人访问客户端未找到错误
Laravel 8 Passport createToken 相关问题修复方案
两个问题分别对应IDE静态识别错误、运行时配置缺失,按以下步骤逐一修复即可。
一、修复VS Code Intelephense提示undefined method 'createtoken'错误
该问题属于静态代码分析插件的识别偏差,不代表代码本身有运行错误,按以下步骤排查修复:
- 首先排查trait引入错误:确认User模型顶部引入的是
use Laravel\Passport\HasApiTokens;,禁止引入Laravel\Sanctum\HasApiTokens同名trait,这是最高发的错误原因;确认模型类内部已写入use HasApiTokens;引入特性。 - 清理框架编译缓存,重建类索引:
php artisan clear-compiled php artisan optimize:clear
- 在VS Code中按快捷键
Ctrl+Shift+P,唤起命令面板后执行Intelephense: Index Workspace,重建工作区代码索引。 - 如果上述操作后仍有提示,可在User模型类上方添加PHPDoc注释补全静态类型信息,不影响业务运行:
/** * @method \Laravel\Passport\PersonalAccessTokenResult createToken(string $name, array $scopes = []) */ class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // 原有模型代码 }
二、修复接口测试抛出Personal access client not found. Please create one.运行时异常
该错误是运行时逻辑错误,原因是Passport未生成个人访问场景所需的客户端凭据,按以下步骤修复:
- 先确认基础配置正确:打开
config/auth.php,将API guard的驱动设置为passport:
'guards' => [ // 其他guard配置 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
同时打开app/Providers/AuthServiceProvider.php,在boot()方法中添加Passport路由注册代码:
public function boot() { $this->registerPolicies(); \Laravel\Passport\Passport::routes(); }
- 执行命令生成个人访问客户端,注意必须携带
--personal参数:
php artisan passport:client --personal
命令执行后按提示输入任意客户端名称(例如Personal Access Client),回车即可完成生成。
- 验证:打开数据库的
oauth_clients表,确认存在一条personal_access_client字段值为1的记录,此时重新调用接口,原令牌生成代码$token = Auth::user()->createToken("user_token")->accessToken;即可正常返回访问令牌。 - 日常开发如果经常执行
migrate:fresh重置数据库,可将个人访问客户端生成逻辑写入数据库填充器,避免每次手动执行命令:
// 在DatabaseSeeder的run方法中添加 \Laravel\Passport\Client::create([ 'user_id' => null, 'name' => 'Personal Access Client', 'secret' => \Illuminate\Support\Str::random(40), 'provider' => 'users', 'redirect' => config('app.url'), 'personal_access_client' => 1, 'password_client' => 0, 'revoked' => 0, ]);
内容的提问来源于stack exchange,提问作者becky
相关产品推荐
相关产品推荐

