You need to enable JavaScript to run this app. Laravel 8 集成Passport开发API 携带api_token访问受保护路由报Unauthenticated错误
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 集成Passport开发API 携带api_token访问受保护路由报Unauthenticated错误

核心问题与解决方案

1. Passport核心配置缺失

当前AuthServiceProvider的boot方法未注册Passport的认证逻辑,导致auth:api中间件无法识别Passport的令牌校验流程,是这类未认证错误的最常见诱因。
修复步骤:

  • 引入Passport门面:在AuthServiceProvider顶部添加use Laravel\Passport\Passport;
  • 在boot方法中添加路由注册逻辑:
public function boot()
{
    $this->registerPolicies();
    // 启用Passport认证路由
    Passport::routes();
}
  • 检查config/auth.php的守卫配置,确保api守卫的驱动设置为passport,而非默认的token:
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

2. 两套认证体系冲突

当前User模型同时混用了Laravel原生简单API令牌的字段配置和Passport的trait逻辑,会导致认证校验逻辑完全错乱:

  • 原生简单令牌的校验逻辑是直接查询用户表的api_token字段,和Passport的令牌存储逻辑(存在oauth_access_tokens数据表)完全独立
  • 如果注册接口手动生成随机串存入用户表的api_token字段、并把这个值返回给前端,哪怕前端正确加了Bearer前缀,Passport驱动也根本不会校验这个值,自然返回未认证
    修复方向:
  • 从User模型的$fillable、$hidden数组中移除api_token字段,避免和Passport逻辑混淆
  • 严格走Passport的令牌生成流程:用户认证通过后,调用$user->createToken('client-name')->accessToken生成令牌串返回给前端,这类生成的令牌会被Passport驱动正常校验

3. 其他高频排查点

  • 确保已经执行过php artisan passport:install,生成Passport所需的加密密钥和默认客户端凭证,否则令牌的签发、校验全流程无法正常工作
  • 补全路由分组的缺失收尾括号:当前贴出的路由代码中,auth:api中间件分组的闭包少了一个闭合的});,会直接导致路由解析异常
  • 修改配置后执行php artisan config:clear、php artisan route:clear清除缓存,确保新的配置被框架加载
  • 检查Postman的Authorization头格式:严格遵循Bearer 令牌串的格式,不要在值中带入多余的空格、换行、引号符号

内容的提问来源于stack exchange,提问作者user9277271

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 09:36:01