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

NextJS集成Django生产环境无法设置CSRF Cookie求助

排查步骤与解决方案

1. 强制开启Cookie的Secure属性

生产环境使用HTTPS时,SameSite=None必须搭配Secure属性,否则浏览器会直接拒绝保存Cookie。检查Django配置:

# settings.py
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True

本地Docker可能用HTTP协议无需设置,但生产环境HTTPS场景下这是硬性要求。

2. 配置Cookie的Domain属性

主域名mydomain.com.br与子域名api.mydomain.com.br共享Cookie,需将Domain设为根域名:

# settings.py
CSRF_COOKIE_DOMAIN = '.mydomain.com.br'
SESSION_COOKIE_DOMAIN = '.mydomain.com.br'

注意域名前的点前缀,确保所有子域名都能访问该Cookie。若未设置,Cookie默认绑定当前子域名,主域名的NextJS无法读取,且浏览器会因跨域策略拒绝保存。

3. 验证CORS配置完整性

Django需允许主域名请求并开启凭证携带:

# settings.py
CORS_ALLOWED_ORIGINS = [
    "https://mydomain.com.br",
]
CORS_ALLOW_CREDENTIALS = True

同时NextJS请求必须携带凭证参数:

// NextJS请求示例
fetch('https://api.mydomain.com.br/api/csrf/', {
  method: 'GET',
  credentials: 'include'
})

缺少任一配置,浏览器都不会保存跨域场景下的Cookie。

4. 检查反向代理(如Nginx)的头信息传递

若VPS使用Nginx反向代理Django,需确保正确传递协议与域名头,否则Django会误判为HTTP环境,导致Secure属性失效:

location / {
    proxy_pass http://your-django-container:8000;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

5. 查看浏览器控制台的直接报错

打开浏览器开发者工具(F12),在Console标签查看Cookie相关警告(如SameSite=None requires Secure),或在Application标签检查Cookie是否被实际写入,这类提示能直接定位问题。

6. 确认Docker网络与端口转发

排查生产环境Docker容器的网络连通性,确保反向代理未篡改或丢失响应头中的Set-Cookie字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:42:04