【问题标题】:Why csrftoken cookie works?为什么 csrftoken cookie 有效?
【发布时间】:2018-01-04 02:49:04
【问题描述】:

我正在从 Django 1.4.3 升级到 Django 11.3。

我有一个包含 2 种不同形式的网页。两个表单都加载了 {%csrf_token%}。流程是 - 用户使用表单 1 ( ajax ) 登录,然后显示第二个表单。用户以第二种形式输入数据并使用 ajax 提交。现在,如果我这样做了,这个请求就会失败(在 Django 1.4.3 下工作)-

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

现在,为了解决这个问题,我从 cookie 中获取 csrftoken 值并将 cookie 作为 ajax 的一部分发送,它可以工作 -

csrfmiddlewaretoken = _getHelperCookie('csrftoken');

我很困惑为什么让客户端 cookie 有效?登录后,Django调用rotate_token;这实际上会影响什么?

【问题讨论】:

    标签: django django-csrf


    【解决方案1】:

    正如您所说,作为安全措施,Django 在您登录时轮换 CSRF 令牌。这个started in Django 1.5.2

    由于您使用 ajax 请求登录,旧令牌仍在 html 中。当您从 html 中获取令牌时,您使用的是旧令牌,因此您会收到 CSRF 错误。

    当您从 cookie 中获取令牌时,您将获得新令牌,因此您避免了错误。

    【讨论】:

      猜你喜欢
      • 2012-11-04
      • 2017-12-04
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      相关资源
      最近更新 更多