2014-01-15 91 views
3

每當我嘗試登錄到Django的管理員應用程序時,填寫用戶名和密碼並提交表單後,頁面將永久掛起。Django Admin - CSRF驗證失敗。請求中止

當我刷新瀏覽器POST請求,我得到:

CSRF verification failed. Request aborted. 

enter image description here

當我再次刷新頁面,一切正常,我看到管理應用程序,我登錄,我可以在我的應用程序和表格上執行CRUD操作。

任何想法爲什麼?

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

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

Nginx的反向代理,爲

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

這是我的nginx的配置:

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; 
    } 

} 

編輯:

所以,我找到了解決方法。當我還讓我的Nginx的反向代理服務器80端口重定向,但像這樣所有的HTTP請求到https:

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

它解決了這一問題。任何想法爲什麼?

+0

有關我現在實施的解決方法,請參閱我的問題末尾的編輯。 –

回答

5

檢查您的設置是否存在覆蓋SESSION_COOKIE_SECURECSRF_COOKIE_SECURE值的值,因爲問題可能與CSRF Coo​​kie相關。 編輯:我其實這兩個值設置爲True。

此外,請檢查您的SECURE_PROXY_SSL_HEADER設置,但我不確定它與您的問題有關係。我在你的nginx conf文件中缺少一個proxy_set_header X-Forwarded-Protocol指令,用於讓Django知道你正在通過代理。

相關問題