Django Admin – CSRFvalidation失败。 请求中止

每当我尝试login到Django的pipe理员应用程序,填写用户名和密码并提交表单后,页面永远挂起。

当我在浏览器中刷新POST请求时,我得到:

CSRF verification failed. Request aborted. 

在这里输入图像说明

当我再次刷新页面,一切正常,我看到pipe理员应用程序,我login,我可以去我的应用程序和表格进行CRUD操作。

任何想法为什么?

我在使用https握手的Django应用程序前面有Nginx反向代理。 所以当你去(例子):

 https://platform.staging.com/admin/ 

Nginx反向代理到

 http://admin1.staging.platform.com/admin/ 

这是我的nginxconfiguration:

 upstream admin-cluster { ip_hash; server admin1.staging.platform.com; } # force redirect of http to https # application will be available only over https server { listen 80 default; server_name platform.staging.com; rewrite ^ https://$server_name$request_uri? permanent; } # https server # traffic is going to local web servers over normal http # front nginx proxy server will hold ssl session server { listen 443 ssl spdy; server_name platform.staging.com; keepalive_timeout 70; ssl on; ssl_certificate /etc/ssl/platform.staging.com.crt; ssl_certificate_key /etc/ssl/platform.staging.com.key; location /admin { proxy_pass http://admin-cluster; } } 

编辑:

所以,我find了一个解决方法。 当我允许我的Nginx反向代理上的端口80,但redirect所有的http请求https这样的:

 server { listen 80 default; server_name platform.staging.com; rewrite ^ https://$server_name$request_uri? permanent; } 

它解决了这个问题。 任何想法为什么?

检查您的设置值,覆盖SESSION_COOKIE_SECURE和CSRF_COOKIE_SECURE值,因为问题可能与CSRF cookie有关。 编辑 :我其实这两个值设置为True。

另外,请检查您的SECURE_PROXY_SSL_HEADER设置,但我不确定它与您的问题有关系。 我在你的nginx conf文件中缺少一个proxy_set_header X-Forwarded-Protocol指令,用于让Django知道你正在通过代理。