2017-07-28 98 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中获取令牌时,会得到新的令牌,因此您可以避免该错误。