调整PHP版本后出现OAuth2范围无效错误,恢复后仍未解决
解决PHP版本升级后Passport createToken的Scope无效错误
问题背景
将composer.json的PHP版本要求从:
"require": { "php": "^7.3|^8.0" }
修改为:
"require": { "php": "^7.4|^8.0" }
执行composer update后,调用$user->createToken('Customer Access Token', ['user']);时触发错误:
The requested scope is invalid, unknown, or malformed in file
vendor\league\oauth2-server\src\Exception\OAuthServerException.phpon line 182
删除vendor文件夹、composer.lock并使用旧锁文件重装依赖后问题仍存在。
解决方案
1. 清理Laravel全量缓存
缓存残留可能导致依赖回滚后逻辑仍异常,执行以下命令:
php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear php artisan optimize:clear
2. 确认Scope已正确注册
Passport需要在AuthServiceProvider中显式注册所有使用的Scope,检查app/Providers/AuthServiceProvider.php的boot方法:
use Laravel\Passport\Passport; public function boot() { $this->registerPolicies(); // 确保注册了'user'这个Scope Passport::tokensCan([ 'user' => '访问用户资源', // 其他需要的Scope... ]); }
如果未注册userScope,添加后重新运行应用。
3. 强制同步Passport与OAuth2 Server版本
PHP版本变更可能触发了依赖的隐性升级,导致Passport与league/oauth2-server版本不兼容:
- 在composer.json中明确指定当前项目兼容的Passport版本(例如
"laravel/passport": "^10.4",需匹配你的Laravel版本) - 执行命令重新安装依赖:
composer update laravel/passport --with-all-dependencies
- 若仍有问题,删除composer.lock和vendor文件夹,执行
composer install重新生成兼容的依赖环境。
4. 检查PHP版本与Passport的兼容性
确认当前使用的Passport版本支持PHP7.4:
- Laravel Passport 10.x及以上版本支持PHP7.4+
- 若使用的Passport版本过低,需升级到兼容版本(同时确保与Laravel主版本匹配)
内容的提问来源于stack exchange,提问作者Tehseen
相关产品推荐
相关产品推荐

