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

排查Django Admin 403 Forbidden错误:CSRF Cookie未设置问题

解决Django Admin登录时CSRF Cookie存在但仍报403的问题

1. 检查浏览器Cookie权限

  • 确认Chrome未禁用第三方Cookie,本地localhost或子域名场景下,浏览器可能限制Cookie发送。
  • 查看响应头中CSRF Cookie的HttpOnly属性,若为true则JS无法读取,表单提交时会丢失令牌,需确保该属性为false。

2. 验证登录表单的CSRF令牌渲染

  • 打开Admin登录页面源码,检查是否存在<input type="hidden" name="csrfmiddlewaretoken" value="xxx">字段。若缺失,可能是模板渲染异常或中间件配置错误。

3. 核对Django中间件配置

  • 确保settings.py的MIDDLEWARE列表包含以下中间件,且顺序正确:
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    
    注意CsrfViewMiddleware必须在AuthenticationMiddleware之前。

4. 确认站点域名相关配置

  • 检查ALLOWED_HOSTS是否包含当前访问域名(如localhost、127.0.0.1或实际域名),未在列表内会导致Django拒绝请求。
  • 若站点通过HTTPS或非标准端口访问,需将域名添加至CSRF_TRUSTED_ORIGINS:
    CSRF_TRUSTED_ORIGINS = ['https://your-domain.com', 'http://localhost:8000']
    

5. 清除浏览器缓存与Cookie

  • 旧Cookie可能引发冲突,手动清除当前站点的Cookie和缓存后重新尝试登录。

6. 排查反向代理/服务器配置(若有)

  • 若通过Nginx、Apache等反向代理部署,需确保代理传递X-Forwarded-Proto、X-Forwarded-Host头部。例如Nginx配置:
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    
    同时在settings.py中添加:
    USE_X_FORWARDED_HOST = True
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:19:51