[英]django CSRF token cookie not set for some users
在大多數正常運行的應用程序中,我一直遇到零星的CSRF錯誤。 我應該做的所有事情:我在模板中使用{% csrf_token %}
以獲取普通表單,並在我的ajax POST中設置X-CSRFToken
標頭:
$.ajaxSetup({
beforeSend: function(xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
},
});
我什至通過編寫調用get_token
的自定義中間件來強制在所有視圖中設置cookie。
def CSRFForceCookieMiddleware(get_response):
def middleware(request):
response = get_response(request)
get_token(request) # Force to set cookie in all responses
return response
return middleware
在我的本地主機和大多數用戶的生產環境中,一切正常。 但是對於某些用戶,我會收到403 CSRF驗證錯誤。
我添加了很多調試信息。 事實證明,即使CsrfViewMiddleware
設置了csrftoken
也在響應中設置cookie,在實際的瀏覽器中也沒有設置cookie( $.cookie('csrftoken')
為null
)。 因此,在進行ajax調用時,請求中沒有cookie。
因此,我想這幾乎意味着某些用戶的瀏覽器正在阻止此Cookie? 其他人有這種經歷嗎?
大多數瀏覽器都有“阻止所有cookie”選項。 您可能想在javascript中檢測到該錯誤,並向您的用戶發出警告,要求某些功能性cookie才能使網站正常工作。 還有另一個SO問題顯示了如何執行此操作。
或者,從隱藏的輸入字段中獲取令牌( {% csrf_token %}
將在您的模板中添加該字段)。 那應該一直有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.