Laravel 11与Passport报错:No supported authentication provider found for Token
问题描述
使用Laravel 11搭配Laravel Passport 11.x实现API认证,已完成OAuth2认证和个人访问令牌配置,但使用个人访问令牌请求受保护路由时触发错误:
InvalidArgumentException: No supported authentication provider found for token.
已完成的配置步骤:
- 发布迁移文件并执行
php artisan migrate创建所需数据表 - 运行
php artisan passport:install完成Passport安装
运行环境:PHP 8.1
相关代码如下:
AuthController生成令牌代码
use Laravel\Passport\PersonalAccessTokenResult; public function login(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); $user = User::where('email', $request->email)->first(); if ($user && Hash::check($request->password, $user->password)) { $token = $user->createToken('Personal Access Token')->accessToken; return response()->json(['token' => $token]); } return response()->json(['error' => 'Unauthorized'], 401); }
受保护路由代码
Route::middleware('auth:api')->get('/user', function (Request $request) { return response()->json($request->user()); });
错误成因
- API Guard驱动未配置为Passport:Laravel 11默认的
apiguard驱动为sanctum,而非passport,导致系统无法识别Passport生成的个人访问令牌。 - 未手动注册Passport路由:Laravel 11移除了Passport路由的自动注册逻辑,若未手动注册,认证流程无法正常解析令牌。
- 请求头格式错误:发送请求时未正确携带
Authorization头,或未遵循Bearer {token}的格式要求。
修复方案
1. 修改API Guard驱动配置
打开config/auth.php,将guards下的api驱动改为passport:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', // 替换为passport 'provider' => 'users', ], ],
2. 在AuthServiceProvider中注册Passport路由
打开app/Providers/AuthServiceProvider.php,在boot方法中添加路由注册代码:
use Laravel\Passport\Passport; public function boot(): void { $this->registerPolicies(); // 注册Passport认证相关路由 Passport::routes(); }
3. 规范请求头格式
发送请求时,在Authorization请求头中携带令牌,格式必须为:
Authorization: Bearer {你的个人访问令牌}
4. 清除配置缓存(推荐)
执行以下命令清除配置缓存,确保所有修改生效:
php artisan config:clear
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

