我有一個運行在HTTP和HTTPS後面的博客,並且遇到了有關csrf標記驗證的問題。用於HTTP和HTTPS的Django CSRF
CSRF令牌在每種形式中都是可用的,但是當我使用HTTP版本的網站並嘗試提交註釋時,出現以下錯誤。
禁止(403) CSRF驗證失敗。請求中止。
引薦者檢查失敗 - http://mysite.com/blog/1/不符合https://mysite.com/。
當通過HTTPS查看博客時,它工作正常。
任何人都知道如何獲得驗證以匹配兩者?
我有一個運行在HTTP和HTTPS後面的博客,並且遇到了有關csrf標記驗證的問題。用於HTTP和HTTPS的Django CSRF
CSRF令牌在每種形式中都是可用的,但是當我使用HTTP版本的網站並嘗試提交註釋時,出現以下錯誤。
禁止(403) CSRF驗證失敗。請求中止。
引薦者檢查失敗 - http://mysite.com/blog/1/不符合https://mysite.com/。
當通過HTTPS查看博客時,它工作正常。
任何人都知道如何獲得驗證以匹配兩者?
我想通了。這是我的fastcgi參數的問題
fastcgi_param HTTPS on;
設置要求HTTPS打開的環境變量。當這個變量打開時,Django爲csrf標記執行一些額外的強制執行。
你可能要檢查你的設置,看看如果你設置了CSRF_COOKIE_SECURE參數設置爲True
這標誌着該cookie的安全,並防止瀏覽器接受它通過非安全連接,也就是HTTP。
要檢查是否是問題的根源,您可以使用任何工作視圖並放入斷言False以獲取調試屏幕,並查看Csrf cookie是發送還是發送。
感謝您的幫助!我當然認爲是這樣,但實際上它與我在上面發佈的fastcgi參數設置的環境變量有關。 – Dave
在哪個Web服務器上運行您的網站?我有同樣的問題,在lighttpd下運行,目前無法解決它。 –
你是怎麼修復它的?你刪除了fastcgi_param嗎?沒有它,request.is_secure()不能正常工作... – Soid