You need to enable JavaScript to run this app. Laravel API如何同时校验token有效性与web会话登录状态
优惠活动
大模型
产品
解决方案
定价
更多

Laravel API如何同时校验token有效性与web会话登录状态

问题根因
  • Laravel 加载 auth:api 中间件后,会将默认认证Guard切换为api,你直接调用Auth::check()实际校验的是api guard的token有效性,不是web端会话的有效性
  • 默认API路由组未挂载StartSession中间件,就算指定web guard也无法读取到会话数据,无法正常校验web登录状态
修复步骤

1. 调整API路由中间件配置

给需要校验web会话的API路由组添加会话启动中间件,确保可以读取到laravel_session对应的数据,示例:

// routes/api.php
Route::middleware([
    \Illuminate\Session\Middleware\StartSession::class, // 先启动会话
    \App\Http\Middleware\IsCharacterLoggedInMiddleware::class, // 再校验web登录状态
    'auth:api' // 最后校验api token
])->group(function () {
    // 你的业务API路由
});

2. 修改自定义中间件校验逻辑

显式指定使用web guard做会话校验,不要使用默认Guard:

<?php

class IsCharacterLoggedInMiddleware
{
    public function handle($request, Closure $next, $guard = null)
    {
        // 显式用web guard校验会话有效性
        if (!\Auth::guard('web')->check()) {
            // 会话失效后的逻辑,比如返回401错误
            return response()->json(['message' => '会话已失效,请重新登录'], 401);
        }

        return $next($request);
    }
}
注意事项
  • 同站前端调用API时,需要正常携带Cookie和X-CSRF-TOKEN请求头,否则会触发CSRF校验失败
  • 如果API有跨域调用需求,需要单独配置CORS规则,同时将对应路由添加到App\Http\Middleware\VerifyCsrfToken的例外列表中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 00:15:07