Django中奇怪的CSRF错误与Nginx和Gunicorn



Background

当我尝试访问我的 Django 管理面板时,即使我禁用了 CSRF 中间件,我也会Forbidden (403) CSRF verification failed. Request aborted.。这会影响位于不同位置使用不同浏览器的所有用户。我已经按照步骤修复了堆栈溢出中几个问题的此错误,但仍然相同。这已经杀死了我几个星期。

问题

我正在使用 https 与 Cloudflare(免费计划(,但如果我停用 https,此错误仍然存在。这发生在mydomain.com/admin

已知事实

  1. 我正在使用 Django 2.0 和 gunicorn 19.0
  2. 我已经检查了浏览器的 cookie
  3. 我试过删除django.middleware.csrf.CsrfViewMiddleware
  4. 这只发生在 Django 管理仪表板中,当启用 CSRF 中间件时,另一个 POST 或 GET 表单工作正常。
  5. 我已登录到我的 Django 管理仪表板,如果我注销,我可以再次登录,没有问题,但如果我从另一个地方尝试,或者与其他用户一起尝试,问题会再次出现。
  6. 独角兽配置 这是默认的。

配置文件

Settings.py

CSRF_TRUSTED_ORIGINS = ['.domain.com']
CSRF_COOKIE_DOMAIN = ['.domain.com', '127.0.0.1']
CSRF_COOKIE_SECURE = True
ALLOWED_HOSTS = ['127.0.0.1', 'domain.com', 'www.domain.com', '104.336.44.153', '.domain.com']
MIDDLEWARE = [
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

恩金克斯

server {
server_name domain.com;
access_log off;
location /static {
alias /opt/myenv/myenv/static/;
}
location /descargas/dir/ {
alias /opt/myenv/myenv/dir/;
}

location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}

请帮忙!感谢您的阅读。

CSRF cookie 由CsrfViewMiddleware设置,所以你应该保留它。

我会尝试更改您的MIDDLEWARE顺序:

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', # THE FIRST
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

相关内容

  • 没有找到相关文章

最新更新