Django生产环境登录/注册时出现CSRF POST错误排查求助
Django生产环境CSRF验证失败问题(已解决)
问题背景
本地服务器运行WebApp完全正常,但生产环境中登录/注册操作频繁触发CSRF POST错误。已在settings.py中启用django.middleware.csrf.CsrfViewMiddleware,并尝试了多种社区推荐配置仍未解决。
已尝试的配置(settings.py)
ALLOWED_HOSTS = ["*"] CSRF_COOKIE_SECURE = True SESSION_COOKIE_HTTPONLY = True CSRF_COOKIE_HTTPONLY = True CSRF_COOKIE_DOMAIN = 'mydomainname' CSRF_COOKIE_NAME = "csrftoken_custom" SESSION_COOKIE_SAMESITE = 'Lax' CSRF_COOKIE_SAMESITE = 'Lax' CSRF_TRUSTED_ORIGINS = ['*']
登录表单模板代码(login.html)
<form method="POST" action="{% url 'login' %}"> {% csrf_token %} <div class="username-email"> Username / Email </div> <div class="login-rectangle"> <input class="login-rectangle-text" type="text" name="username" placeholder="Type Here" required> </div> <div class="password"> Password </div> <div class="login-rectangle-2"> <input class="login-rectangle-2-text" type="password" name="password" placeholder="**********" required> <div class="eye"> <img src="{% static 'images/eye.png' %}"> </div> </div> <div class="registerframe"> <button class="create-user" type="submit"><span class="create-user-text">Sign In</span></button> </div> </form>
错误信息
- Railway生产日志:
Forbidden (Origin checking failed - https://mywebappname does not match any trusted origins.): /login/ - 调试模式下错误提示:
Forbidden (403)
CSRF verification failed. Request aborted.失败原因:
Origin checking failed - https:mywebapp does not match any trusted origins.(注:
mywebapp与settings.py中CSRF_COOKIE_DOMAIN配置的域名一致)
解决方法
Django 4.0对CSRF_TRUSTED_ORIGINS的域名格式做了强制修改:必须以协议前缀(http://或https://)开头,而此前版本仅需填写域名本身。
将CSRF_TRUSTED_ORIGINS修改为带协议的格式即可解决问题,示例:
CSRF_TRUSTED_ORIGINS = ['https://mydomainname']
内容的提问来源于stack exchange,提问作者arch_er45
相关产品推荐
相关产品推荐

