2017-07-28 49 views
0

我從Django 1.4.3升級到Django 11.3。爲什麼csrftoken cookie有效?

我有一個網頁有兩種不同的形式。這兩個表單都加載了{%csrf_token%}。流程是 - 用戶使用表單1(ajax)登錄,然後顯示第二個表單。用戶以第二種形式輸入數據並使用ajax提交。現在,這個要求被失敗,如果我(Django的1.4.3下工作) -

csrfmiddlewaretoken = $form.find('input[name="csrfmiddlewaretoken"]').val(); 

現在,爲了解決這個問題,我正從餅乾csrftoken值和發送的cookie作爲阿賈克斯的一部分,它的工作原理 -

csrfmiddlewaretoken = _getHelperCookie('csrftoken'); 

我很困惑,爲什麼讓客戶端cookie工作?登錄後,Django調用rotate_token;這實際上會產生什麼影響?

回答

1

正如您所說,Django在您登錄時將CSRF令牌旋轉爲安全措施。這started in Django 1.5.2

由於您使用ajax請求登錄,舊的令牌仍然在html中。當您從html中獲取令牌時,您正在使用舊令牌,因此您會收到CSRF錯誤。

當您從cookie中獲取令牌時,會得到新的令牌,因此您可以避免該錯誤。