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

Laravel+Next.js生产环境无法生成X-XSRF-TOKEN Cookie求助

问题排查方案

软件版本

  • Sanctum版本:^2.14.1
  • Laravel版本:9.0
  • PHP版本:^8.0.2
  • 数据库驱动及版本:Heroku PostgreSQL 14.4

项目背景

项目拆分backend(基于Laravel Breeze)和frontend(Next.js应用)两个目录,开发阶段按breeze-next文档操作完全正常。目前Laravel API已部署到Heroku,Next.js前端部署到Vercel,对应环境变量均已配置。

已解决问题

  • 跨域资源共享(CORS)问题:通过Laravel配置+Heroku添加FRONTEND_URL环境变量解决
  • CSRF token mismatch错误:调整配置并将session驱动改为cookie解决

当前故障

生产环境可正常完成注册,但无法生成X-XSRF-TOKEN等认证Cookie;登录操作同样无法生成所需认证Cookie,开发环境无此问题。浏览器给出明确提示:

此通过Set-Cookie头设置Cookie的尝试被阻止,因为其SameSite属性为"lux",且来自跨站点响应,并非顶级导航的响应。

排查与修复步骤

  1. 修正SameSite配置错误
    浏览器提示的lux是明显拼写错误,需检查config/session.php中的same_site参数:

    • 跨域场景下需设置为'none'
    • 同时必须开启secure为true(SameSite=None要求Cookie必须通过HTTPS传输)
    • 也可通过Heroku环境变量SESSION_SAME_SITE直接设置,优先级高于配置文件
  2. 验证Sanctum状态域配置

    • 检查config/sanctum.php的stateful数组,确保已加入Vercel前端域名(例如['your-app.vercel.app'])
    • 确认Heroku上的SANCTUM_STATEFUL_DOMAINS环境变量已正确配置,值为前端完整域名
  3. 核对Cookie相关环境变量

    • SESSION_DOMAIN:跨域场景下可设置为null,无需指定具体域名
    • SESSION_SECURE_COOKIE:必须设为true,适配生产环境HTTPS协议
    • SESSION_HTTP_ONLY:保持默认true即可,避免前端脚本篡改Cookie
  4. 检查响应头Set-Cookie字段
    用浏览器开发者工具Network面板查看注册/登录接口的响应头:

    • 确认Set-Cookie中SameSite=None和Secure标记同时存在
    • 若仍显示错误的SameSite值,排查环境变量是否覆盖了配置文件,或Heroku是否已重新部署生效
  5. 确认前端请求配置
    Next.js发送请求时需确保携带凭证:

    • 使用axios时,设置withCredentials: true
    • 使用fetch时,设置credentials: 'include'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:06:28