Laravel 11+Passport注册报错:Attempt to read property "secret" on null
Laravel 11 Passport:调用
createToken时出现"Attempt to read property 'secret' on null"错误 问题核心
在Laravel 11 + Passport环境下,执行$artist->createToken('Token Name')->accessToken生成API令牌时触发500错误,报错Attempt to read property "secret" on null,根源是Passport的Personal Access Client未正确创建或配置,导致代码中$client变量为null,访问其secret属性时出错。
解决方案
1. 重新生成Passport Personal Access Client
在终端执行命令,确保生成Personal Access Client:
php artisan passport:install
若已执行过该命令但问题仍存在,可单独生成Personal Access Client:
php artisan passport:client --personal
执行后按提示输入客户端名称(例如Personal Access Client)即可。
2. 验证环境变量配置
检查项目根目录的.env文件,确认存在以下两个环境变量(执行上述命令后会自动生成):
PASSPORT_PERSONAL_ACCESS_CLIENT_ID=your-client-id PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=your-client-secret
若不存在,可从数据库的oauth_clients表中找到personal_access_client字段值为1的记录,将其id和secret分别填入上述变量。
3. 确保模型正确引入Passport Trait
检查Artist模型,确认已引入HasApiTokens trait:
<?php namespace App\Models; use Laravel\Passport\HasApiTokens; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Factories\HasFactory; class Artist extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // ... 模型其他配置与属性 }
4. 清理缓存
执行以下命令清除配置与缓存,确保新配置生效:
php artisan config:clear php artisan cache:clear
排查辅助步骤
- 查看数据库
oauth_clients表,确认存在personal_access_client = 1的记录,若不存在则说明Passport初始化未完成,需重新执行安装命令。 - 确认
AuthenticationController中createToken的调用逻辑正确(你的代码中该部分逻辑无问题)。
内容的提问来源于stack exchange,提问作者Henrique Guimarães
相关产品推荐
相关产品推荐

