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

Laravel 10特定系统中出现CSRF token mismatch错误

Laravel 10 Ajax表单CSRF Token不匹配问题排查方案

一、排查特定系统的网络环境

  • 检查该系统是否存在企业级代理、防火墙或安全软件,这类设备可能会拦截或修改Laravel生成的XSRF-TOKEN Cookie,导致Token无法正常传递。
  • 确认目标域名是否在config/session.php的domain配置项中,跨子域名场景下,session域名配置错误会直接导致Cookie无法被浏览器携带。

二、验证Ajax请求的Token携带逻辑

确保Ajax请求正确携带CSRF Token,两种标准实现方式:

  1. 请求头携带:通过X-XSRF-TOKEN头传递解码后的Cookie值(Laravel存储的XSRF-TOKEN是URL编码状态),示例代码:
    $.ajaxSetup({
        headers: {
            'X-XSRF-TOKEN': decodeURIComponent(document.cookie.match(/XSRF-TOKEN=([^;]+)/)[1])
        }
    });
    
  2. 表单字段携带:先在页面头部渲染CSRF Token meta标签,再在请求数据中加入_token字段,示例代码:
    <meta name="csrf-token" content="{{ csrf_token() }}">
    
    $.ajax({
        url: '/your-submit-url',
        method: 'POST',
        data: {
            _token: $('meta[name="csrf-token"]').attr('content'),
            // 其他表单数据
        }
    });
    
  • 检查特定系统下的页面是否正确渲染了csrf-token meta标签,避免因页面缓存或动态渲染失败导致Token缺失。

三、检查Laravel核心配置

  • 确认config/cors.php中supports_credentials设置为true,跨域(含同域名不同端口)场景下必须开启该选项才能携带Cookie。
  • 检查config/session.php的secure配置:若该系统为HTTPS环境,需设为true;HTTP环境则设为false或env('SESSION_SECURE_COOKIE', false),否则浏览器会拒绝携带Cookie。
  • 调整config/session.php的same_site配置:避免设为Strict,可改为Lax;跨域场景需设为None(必须配合secure: true)。

四、排查浏览器Cookie权限

  • 让用户在目标浏览器中检查站点Cookie权限:Chrome/Edge可通过地址栏锁图标→「Cookie和站点数据」确认是否允许该网站的Cookie,第三方Cookie场景需额外开启权限。
  • 确认浏览器未开启「阻止第三方Cookie」或隐私模式,这类模式会限制Cookie的传递逻辑。

五、临时调试验证

  • 在app/Http/Middleware/VerifyCsrfToken.php的$except数组中临时加入请求URL,若不再报错则可锁定为CSRF验证问题,再回溯前面的排查步骤。
  • 在控制器或中间件中打印请求头和Cookie信息,确认Token是否被正确携带:
    dd(request()->header(), request()->cookie());
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:07:37