Laravel Passport获取AccessToken后无法认证用户问题排查
解决Laravel 10 Passport认证返回"Unauthenticated"的问题
以下是针对你遇到的问题的具体排查和解决步骤:
1. 检查Token的传递格式
Authorization请求头必须严格遵循 Bearer {你的AccessToken} 格式——注意Bearer和Token之间必须有一个空格,很多人漏掉这个空格直接贴Token,会导致认证逻辑无法识别。
2. 验证Token的有效性
拿到注册接口返回的Token后,直接在代码里验证是否有效:
use Laravel\Passport\Token; $token = Token::findToken('你的AccessToken'); // 输出Token有效性和关联用户 dd($token->isValid(), $token->user);
如果isValid()返回false,优先检查Token是否过期,或者用户是否被软删除(如果User模型用了SoftDeletes trait)。
3. 核对中间件配置顺序
打开app/Http/Kernel.php,确认api中间件组的配置:
protected $middlewareGroups = [ 'api' => [ \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ];
不要把auth:api直接塞进api中间件组,只需要在需要保护的路由上单独应用该中间件。
4. 重新执行Passport迁移
如果之前手动修改过数据库表结构,可能导致Passport的关联表异常,运行命令重置:
php artisan migrate:fresh --seed
这会重建所有表,确保oauth_access_tokens、oauth_clients等表结构完全符合Passport要求。
5. 检查User模型主键类型
如果你的users表主键是UUID或非自增字符串,必须在User模型里明确声明:
protected $primaryKey = 'id'; public $incrementing = false; protected $keyType = 'string';
Passport默认假设主键是自增整数,类型不匹配会导致无法关联到用户。
6. 清除所有缓存
配置修改后缓存未更新是常见问题,执行以下命令清空缓存:
php artisan config:clear php artisan cache:clear php artisan route:clear
7. 确认请求头的完整性
除了Authorization和Accept:application/json,还要注意Content-Type:
- 表单提交用
application/x-www-form-urlencoded - JSON提交用
application/json
错误的Content-Type会导致Laravel无法正确解析请求,间接影响认证逻辑。
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

