You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:45:00