Ajax,CSRF和DELETE

Pab*_*blo 13 django django-csrf

我使用文档中getCookie函数来获取值.djangocsrfmiddlewaretoken

我有以下ajax调用:

var url = reverse_removeprofile.replace(/deadbeef/, key);
$.ajax({
    type:          "DELETE",
    url:           url,
    data:          "csrfmiddlewaretoken=" + getCookie("csrftoken"),
    success:       function() { ... },
});
Run Code Online (Sandbox Code Playgroud)

执行此代码后,会django引发403异常,告诉我CSRF验证失败.但是,如果我改变了typeDELETEPOST那么django是高兴的,不抱怨的.

我真的无法在谷歌找到有用的东西,但我发现这张(现已关闭并修复)的门票:https://code.djangoproject.com/ticket/15258

如果我理解正确,那么这个问题已在1.4里程碑中修复.我使用django 1.4但仍无法通过DELETE请求验证CSRF令牌.

我在这里错过了什么吗?

Ian*_*and 30

这似乎是一个jQuery错误,由于是否应该将DELETE数据附加到URL(如GET请求)或请求正文(如POST)而引起一些混淆

请参阅此错误报告.

您可以通过使用替代CSRF方法进行AJAX调用来解决此问题,X-CSRFToken并在请求上设置标头.尝试将您的AJAX调用更改为如下所示:

$.ajax({
    type: "DELETE",
    url: url,
    beforeSend: function(xhr) {
        xhr.setRequestHeader("X-CSRFToken", getCookie("csrftoken"));
    }
    success: function() { ... },
});
Run Code Online (Sandbox Code Playgroud)