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

Laravel API+Next.js SPA支付回调重定向后会话过期问题求助

解决Laravel Sanctum SPA支付回调后会话过期问题

需要修改的.env配置项

针对本地环境,调整以下关键配置即可修复会话丢失问题:

  • 更新SANCTUM_STATEFUL_DOMAINS:添加API域名,确保跨子域场景下会话能被正确识别
    SANCTUM_STATEFUL_DOMAINS=mysite.local,api.mysite.local,.mysite.local
    
  • 新增SESSION_SAME_SITE:设置为lax,允许跨子域重定向时携带会话Cookie
    SESSION_SAME_SITE=lax
    
  • 明确SESSION_SECURE:本地HTTP环境下设为false,避免浏览器拒绝非HTTPS环境的Cookie
    SESSION_SECURE=false
    

其余原有配置保持不变:

APP_URL=http://api.mysite.local
SESSION_DRIVER=file
SESSION_LIFETIME=120
SESSION_DOMAIN=.mysite.local
SPA_URL=http://mysite.local

核心问题根源与额外代码调整

问题本质是支付回调路由在web.php中,而web中间件组默认包含StartSession。第三方支付网关的回调请求不带用户会话Cookie,Laravel会自动创建空会话,重定向时这个空会话的Cookie会覆盖用户原有有效会话,导致登录状态丢失。

需配合调整路由中间件:

  • 推荐方案:将回调路由移至api.php,api中间件组默认不含会话相关中间件,不会触发新会话创建
  • 备选方案(保留在web.php):手动移除StartSession中间件
    Route::post('/payment/success', [PaymentController::class, 'success'])
        ->withoutMiddleware(['StartSession'])
        ->name('payment.success');
    

内容的提问来源于stack exchange,提问作者Joy Ram Sen Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:50:25