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

Laravel Sanctum发送XSRF-TOKEN仍遇419 CSRF令牌不匹配问题求助

解决Laravel Breeze API部署子目录后的419 CSRF错误

以下是针对你遇到的问题的具体排查和解决步骤:

1. 核对Sanctum的子目录适配配置

  • 打开config/sanctum.php,检查stateful数组,把你的前端主域名加进去(比如['yourdomain.com'],不用带/frontend子目录)。
  • 确认prefix保持默认的'sanctum',同时前端请求CSRF的路径必须是后端子目录完整路径:/laravel-breeze-api/sanctum/csrf-cookie,别直接请求根目录下的sanctum/csrf-cookie。

2. 修正Cookie的域名与路径设置

  • 打开.env,把SESSION_DOMAIN设为你的主域名(比如.yourdomain.com,开头的点要加上,这样子目录也能读取Cookie),别设置成带子目录的路径。
  • 确保SESSION_PATH在config/session.php里是默认的'/',这样Cookie能在整个域名下生效,不会被限制在后端子目录里。
  • 用浏览器开发者工具查看「Application→Cookies」,检查XSRF-TOKEN和laravel_session的Domain是不是主域名,Path是不是/。如果Path是/laravel-breeze-api,前端子目录读不到,得调整Laravel的session配置。

3. 检查前端请求的配置细节

  • 前端请求login接口时,必须用完整路径:/laravel-breeze-api/login,别用相对路径或者错误的根路径。
  • 如果用axios,一定要开启withCredentials: true,并且把baseURL设为后端子目录的完整URL(比如https://yourdomain.com/laravel-breeze-api),让axios自动从Cookie里取X-XSRF-TOKEN,别手动拼接请求头。示例代码:
    axios.defaults.withCredentials = true;
    axios.defaults.baseURL = 'https://yourdomain.com/laravel-breeze-api';
    
  • 查看login请求的Network面板,确认Request Headers里有X-XSRF-TOKEN,且值和Cookie里的XSRF-TOKEN一致,同时Cookie头包含这两个Cookie。

4. 适配共享主机的URL重写规则

  • 后端laravel-breeze-api目录下的.htaccess要调整RewriteBase,适配子目录:
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /laravel-breeze-api/
        RewriteRule ^(.*)$ public/$1 [L]
    </IfModule>
    
  • 要是共享主机没开HTTPS,把.env里的SESSION_SECURE_COOKIE设为false(生产环境务必开启HTTPS),不然Cookie无法正常存储。

5. 确认CORS配置正确

  • 打开config/cors.php,paths要包含['api/*', 'sanctum/csrf-cookie'],allowed_origins设为前端的完整URL(比如https://yourdomain.com/frontend),supports_credentials必须设为true。
  • allowed_methods要覆盖GET, POST, PUT, DELETE,allowed_headers要包含X-XSRF-TOKEN。

最后验证

查看Laravel的日志文件storage/logs/laravel.log,里面会有CSRF错误的具体原因,比如token不匹配的细节,能帮你快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:22:56