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

Django DEBUG模式下禁用CSRF失效,如何登录admin及调试API?

问题分析与解决方案

一、当前配置的核心错误

1. HTTPS Cookie配置不匹配调试环境

你设置了SESSION_COOKIE_SECURE = True和CSRF_COOKIE_SECURE = True,这两个参数要求浏览器仅在HTTPS连接下发送对应的Cookie。但调试时你用的是HTTP(云端无域名的IP+端口访问、本地localhost:3000都是HTTP),导致浏览器根本不会把CSRF Cookie和Session Cookie发给服务器,直接触发验证失败。

2. 禁用CSRF的中间件位置错误

Django中间件按顺序执行,如果你把自定义的禁用CSRF中间件放在MIDDLEWARE列表末尾,它会在官方的CsrfViewMiddleware之后运行——此时CSRF验证已经完成,你的中间件完全起不到作用,必须把它放在CsrfViewMiddleware之前。

二、调试模式下的两种解决方案

方案1:修正配置,保留CSRF验证(推荐,贴近生产环境)

通过DEBUG状态自动切换Cookie安全配置,同时补全可信来源:

# settings.py
# 调试时用HTTP允许发送Cookie,生产环境自动启用HTTPS限制
SESSION_COOKIE_SECURE = not DEBUG
CSRF_COOKIE_SECURE = not DEBUG

# 补充云端调试用的IP+端口(比如http://123.45.67.89:8000)
CSRF_TRUSTED_ORIGINS = [
    'http://localhost',
    'http://localhost:3000',
    'http://你的云端IP:端口',
    'https://example.com',
]

# 若使用corsheaders,必须开启允许携带Cookie
CORS_ALLOW_CREDENTIALS = True

# 确保ALLOWED_HOSTS包含云端IP和本地地址
ALLOWED_HOSTS = ['你的云端IP', 'localhost', '127.0.0.1']

方案2:DEBUG=True时全局禁用CSRF验证(仅调试用)

如果你需要完全绕过验证,按以下步骤操作:

  1. 在你的APP下创建middleware.py,编写禁用中间件:
# your_app/middleware.py
class DisableCSRFMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 标记请求跳过CSRF验证
        setattr(request, '_dont_enforce_csrf_checks', True)
        response = self.get_response(request)
        return response
  1. 在settings.py中按顺序加载中间件,仅在DEBUG模式下启用禁用逻辑:
# settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
]

# 仅调试模式下添加禁用中间件,放在CsrfViewMiddleware之前
if DEBUG:
    MIDDLEWARE.append('your_app.middleware.DisableCSRFMiddleware')

MIDDLEWARE.extend([
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:57:25