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

如何在Laravel Passport的API请求中保持laravel_session Cookie不变?

解决Laravel Passport中API请求laravel_session Cookie频繁变更的问题

核心原因是Laravel Passport默认是无状态认证机制,你强行给API中间件加入Session初始化逻辑,会和Passport的认证流程冲突,导致Session Cookie不断重建。以下是可行的解决步骤:

  • 移除API中间件组的StartSession
    直接从app/Http/Kernel.php的api中间件数组里删掉\Illuminate\Session\Middleware\StartSession::class。Passport的Token认证不需要依赖Session,强行引入会让框架每次请求都尝试重新生成Session,这就是Cookie频繁变更的根源。

  • 修正Session配置项
    调整.env里的Session相关配置,避免干扰Passport的Cookie处理:

    • SESSION_DOMAIN:如果是同域前后端,设置为.site.test(前缀加.适配子域);跨域场景要和前端域名完全匹配
    • SESSION_SAME_SITE:本地HTTP环境设为lax,none仅适用于HTTPS环境且必须配合SESSION_SECURE_COOKIE=true,本地开发用lax更稳定
    • SESSION_SECURE_COOKIE:本地HTTP保持false,线上HTTPS环境改为true
  • 确保Passport认证中间件正确使用
    API路由必须使用auth:api中间件,而非web中间件,示例:

    Route::middleware('auth:api')->group(function () {
        // 你的API业务路由
    });
    
  • 检查跨域请求的凭证传递
    如果是跨域场景,前端请求要开启withCredentials: true(比如Axios配置),同时后端config/cors.php要开启凭证支持:

    'supports_credentials' => true,
    

    确保前端每次请求都完整携带laravel_session Cookie,不能遗漏或篡改。

  • 若需Session+Passport结合使用
    如果你确实需要在API中保留Session(比如用Passport的会话认证模式),要确保:

    1. 执行过php artisan session:table和migrate,生成正确的数据库会话表
    2. 将Passport的CreateFreshApiToken中间件加到web中间件组,而非API中间件组,用于给前端注入API Token

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:02:02