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

自定义Django的CSRF_COOKIE_NAME后请求头缺X-CSRFToken及多实例冲突问题

解决CSRF Failed: CSRF token missing or incorrect.问题

针对你遇到的两个核心问题,分别给出解决方案:

一、请求头缺少X-CSRFToken的处理

  • 严格对应CSRF_COOKIE_NAME配置:前端读取Cookie的名称必须和Django设置的CSRF_COOKIE_NAME完全一致,不能沿用默认的csrftoken。
  • 统一在请求中注入令牌:
    如果你用axios,添加请求拦截器自动携带令牌:
    axios.interceptors.request.use(config => {
      const csrfToken = document.cookie.split('; ').find(row => row.startsWith('你的自定义Cookie名='))?.split('=')[1];
      if (csrfToken) {
        config.headers['X-CSRFToken'] = csrfToken;
      }
      return config;
    });
    
    用fetch的话,直接在请求头中添加:
    const csrfToken = document.cookie.split('; ').find(row => row.startsWith('你的自定义Cookie名='))?.split('=')[1];
    fetch('/your-api-path/', {
      method: 'POST',
      headers: {
        'X-CSRFToken': csrfToken,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(yourData)
    });
    
  • 模板渲染场景校验:如果用Django模板,表单提交要确保使用{% csrf_token %}标签,它会自动生成对应自定义Cookie名的隐藏输入框;AJAX请求可直接通过{{ csrf_token }}变量获取令牌值,再放入请求头。

二、多Django实例Cookie冲突的解决

  • 给每个实例配置独立的CSRF_COOKIE_NAME:比如第一个实例设为app1_csrftoken,第二个设为app2_csrftoken,避免同名Cookie互相覆盖。
  • 同步修改对应前端代码:每个实例的前端分别读取各自的Cookie名称,设置对应的X-CSRFToken请求头。
  • 细化Cookie作用域(可选):如果两个实例共享域名,可通过CSRF_COOKIE_PATH限制Cookie生效路径,比如第一个实例设置CSRF_COOKIE_PATH = '/app1/',第二个设置CSRF_COOKIE_PATH = '/app2/',进一步避免交叉影响。

验证步骤

  1. 打开浏览器开发者工具(F12),进入Application标签,确认两个实例的Cookie名称不同且均存在。
  2. 发起请求后,在Network标签检查请求头,确认X-CSRFToken已正确携带,且值与对应实例的Cookie一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:51:17