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

Laravel Sanctum本地运行正常 部署Heroku后出现419 CSRF token mismatch错误

问题排查及解决方案

核心原因

herokuapp.com属于浏览器公共后缀列表(Public Suffix List)中的域名,浏览器不允许跨二级子域设置/共享Cookie,你原本预期的同根域Cookie共享逻辑在此场景下不生效,是导致419 CSRF报错的核心诱因。

修复步骤

1. 调整生产环境.env配置

替换原有配置为以下值:

SESSION_DRIVER=cookie
SESSION_SECURE_COOKIE=true
SESSION_DOMAIN=school-back-v2.herokuapp.com
SANCTUM_STATEFUL_DOMAINS=react-protected-routes.herokuapp.com

注意事项:

  • SANCTUM_STATEFUL_DOMAINS仅填写前端域名,不要加HTTP/HTTPS前缀、不要加端口
  • 不要将SESSION_DOMAIN设置为.herokuapp.com,该配置会被浏览器拦截
  • SESSION_SECURE_COOKIE必须设为true,Heroku生产环境全站走HTTPS,安全Cookie是必填项

2. 校验CORS配置(config/cors.php)

确保配置满足以下要求:

  • supports_credentials 设为 true
  • allowed_origins 明确填入前端完整域名 https://react-protected-routes.herokuapp.com,禁止使用通配符*
  • paths 数组包含sanctum/csrf-cookie和你的API路由前缀,例如api/*

3. 前端请求规则校验

  • 全局开启请求凭证:给axios设置axios.defaults.withCredentials = true
  • 所有需要鉴权的请求发送前,必须先调用GET请求/sanctum/csrf-cookie获取CSRF Cookie,再发起后续业务请求

4. 生产环境缓存清理

部署完成后执行以下命令清理Laravel配置缓存:
heroku run php artisan config:clear && php artisan config:cache

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:36:00