document.cookie中csrftoken的值与Cookie中的csrftoken不同

时间:2016-07-07 17:11:28

标签: ajax django ember.js django-rest-framework csrf

我正在使用django rest框架。我有Ember前端。在这里,当我从Cookies.get(" csrftoken")获取csrftoken时,它与我在浏览器cookie中看到的csrftoken不同。

以下是截图:

enter image description here

看到Cookie中的csrftoken与X-CSRFToken(由Cookies.get(" csrftoken")设置)不同。

为什么他们不一样?我需要他们俩都一样。请帮忙。

2 个答案:

答案 0 :(得分:0)

您应该在发送请求之前手动设置X-CSRFToken。 Django文档包含了很好的例子: https://docs.djangoproject.com/en/1.9/ref/csrf/#ajax

关于JQuery,但你应该抓住这个想法:

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

想法如下:服务器在cookie中发送您的csrf-token,您的客户端读取cookie并在标头中设置令牌。服务器读取请求标头,请参阅好X-CSRFToken并知道该请求有效。

答案 1 :(得分:0)

在django 1.10中。为了防止BREACH攻击,CSRF保护机制现在在每个请求上更改表单标记值(同时保留可用于验证不同标记的不变秘密)。 也许你的Django版本是1.10 docs