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

Django后端无法获取Cookie中JWT令牌问题求助

Django后端无法获取前端设置的JWT Cookie的排查方案

1. 前端请求必须携带凭证

跨域场景下,浏览器默认不会主动发送Cookie,必须在请求中明确开启携带凭证:

  • 若用axios:
    axios.get('/api/your-endpoint', { withCredentials: true })
    
  • 若用fetch:
    fetch('/api/your-endpoint', { credentials: 'include' })
    
  • 其他请求库请对应开启"携带凭证"配置。

2. 前端设置Cookie需补全关键属性

你的前端Cookie配置缺少跨域必需的sameSite和secure属性,修改代码如下:

cookies.set("jwttoken", result.data.token, { 
  path: "/", 
  maxAge: 3600,
  sameSite: 'none',  // 跨域场景必须设为none
  secure: true       // SameSite=None必须配合Secure,HTTPS环境必填
});

注意:本地HTTP开发环境(如http://127.0.0.1)下,secure: true会导致Cookie无法生效,可临时移除,生产环境必须加回。

3. 检查Cookie域名匹配

如果前端和后端属于不同子域(如前端www.xxx.com、后端api.xxx.com),需在Cookie配置中指定主域名:

cookies.set("jwttoken", result.data.token, { 
  path: "/", 
  maxAge: 3600,
  sameSite: 'none',
  secure: true,
  domain: '.xxx.com'  // 主域名,确保所有子域可访问
});

4. 优化后端CORS配置

你的配置中CORS_ORIGIN_ALLOW_ALL = True与CORS_ALLOWED_ORIGINS存在冲突,生产环境建议关闭全局允许,仅保留可信域名:

# 注释或删除该行
# CORS_ORIGIN_ALLOW_ALL = True

CORS_ALLOWED_ORIGINS = [
    "http://127.0.0.1:8000",
    "https://********-*******.******.com",
    "https://www.******.com"
]
CORS_ALLOW_CREDENTIALS = True

5. 用浏览器工具定位问题

  • 打开开发者工具 → Application → Cookies,确认jwttoken是否存在,检查Domain、Path、SameSite、Secure属性是否符合预期。
  • 切换到Network标签,查看请求的Request Headers是否包含Cookie: jwttoken=xxx:
    • 若没有:说明浏览器未发送Cookie,回到前端配置排查;
    • 若有但后端request.COOKIES为空:检查后端是否有中间件拦截了Cookie。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:17:26