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

Laravel 5.6 Passport API认证在GET请求中无法正常工作求助

解决Laravel Passport SPA认证失败问题

看起来你把CreateFreshApiToken中间件的用法和auth:api守卫的默认逻辑搞混了,我来帮你理清并解决这个问题:

核心问题

auth:api守卫默认使用passport驱动,它只认OAuth2的Bearer访问令牌(也就是请求头里的Authorization: Bearer xxx),而CreateFreshApiToken中间件是给已经通过web session登录的用户生成加密的laravel_tokencookie,让这类用户不用手动获取Bearer令牌就能访问API——但这个机制对应的是web守卫,不是默认配置的api守卫。

具体解决步骤

1. 调整路由中间件(最直接的方案)

如果你的SPA用户是通过Laravel的web登录流程(比如默认的登录页面)认证的,那把API路由的中间件从auth:api改成auth:web即可:

Route::get('categories','Api\Categories@index')->middleware('auth:web');

这样,已登录的web用户只要请求里带对X-CSRF-TOKEN、X-Requested-With头,并且浏览器里有有效的laravel_tokencookie,就能正常访问这个API接口。

2. 验证中间件顺序

确认CreateFreshApiToken在web中间件组里的位置——它必须放在session相关中间件之后,否则无法获取已认证的session用户。打开app/Http/Kernel.php检查:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class, // 确保在这几个session中间件之后
    ],
];

3. 检查请求的关键细节

  • 确认你的SPA请求是AJAX类型:必须携带X-Requested-With: XMLHttpRequest头,CreateFreshApiToken只会给这类请求生成laravel_tokencookie。
  • 查看浏览器的Application标签:确认laravel_tokencookie已经存在,并且域名、路径配置正确。
  • 如果是跨域场景:要确保后端配置了CORS允许携带cookie,同时你的AJAX请求要开启withCredentials(比如axios里设置axios.defaults.withCredentials = true)。

4. 若坚持使用auth:api守卫

如果你一定要用auth:api,那你得放弃CreateFreshApiToken的cookie机制,改用标准的OAuth2流程:

  • 通过密码授权、客户端凭证授权等方式获取access_token。
  • 在请求头里添加Authorization: Bearer {你的access_token},这样auth:api中间件才能识别并通过认证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:04:12