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

Django POST请求出现CSRF cookie未设置问题求助

针对你遇到的Forbidden (CSRF cookie not set.)错误,以下是几个排查和解决方向:

1. 确认CSRF Cookie是否已被正确设置

  • 打开浏览器开发者工具(F12)→「应用」标签→「Cookie」,检查目标域名下是否存在csrftoken Cookie:
    • 如果不存在,需要先触发Django设置该Cookie:可以先发送一个GET请求到Django的任意视图(比如首页接口),Django会自动在响应中设置csrftoken Cookie。
    • 确保Cookie的域名与你process.env.API_DOMAIN完全匹配(包括端口)。

2. 完善Fetch请求的Headers配置

你的Fetch请求缺少Content-Type头,Django在处理JSON格式的POST请求时,需要明确的Content-Type才能正确识别CSRF Token:

async function sendDataToAPI(uri, params) {
    let url = buildURI(uri, params);
    let endpoint = `${process.env.API_DOMAIN}${url}/`;
    try {
        const response = await fetch(endpoint, {
            method: "POST",
            credentials: 'include',
            headers: {
                'X-CSRFToken': Cookies.get('csrftoken'),
                'Content-Type': 'application/json' // 新增这个头
            },
            body: JSON.stringify({
                data: params,
            }),
        });
        const data = await response.json();
        return data;
    // 剩余代码...
}

3. 检查Django中间件配置

确保CsrfViewMiddleware存在于你的MIDDLEWARE列表中(默认是启用的,但如果被误删会导致CSRF验证失效):

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware', # 确认这一行存在
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

4. 验证CSRF Token的获取逻辑

如果Cookies.get('csrftoken')返回undefined,可能是Cookie名称不匹配:

  • 检查Django的settings.py中是否自定义了CSRF_COOKIE_NAME,如果有,JS中需要使用对应的名称获取Cookie。
  • 跨域场景下,确保Cookie的SameSite属性设置正确:可以在settings.py中添加CSRF_COOKIE_SAMESITE = 'Lax'(如果是HTTPS环境可以用'None',但需要同时设置CSRF_COOKIE_SECURE = True)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:03:37