3

我正在通过 HTTP 上的页面向 Django 视图发送 POST 请求- 我使用了此处$.ajax()提供的 CSRF 的 AJAX 片段。我可以像在 Firebug中一样查看 csrftoken cookie ;我想这就是为什么POST 请求的标头被发送为.SecureX-Csrftokennull

有什么方法可以让我真正访问这个 cookie 的值吗?我目前POST正在通过添加到我的视图来绕过 403 错误(因为使用空 CSRF 令牌标头发送)@csrf_exempt- 但希望有适当的 CSRF 方法。

更新澄清:没有通过表格提交这些数据。我只是在页面上加载 javascript 文件(包含 AJAX 调用)时发送 POST。

4

1 回答 1

4

我为获得适当的 csrf 解决方案所做的是:

把我{% csrf_token %}的放在一个有意义的地方。

var csrfToken = $('input[name="csrfmiddlewaretoken"]').val();
$.ajax({
    url: $form.attr('action'),
    type: 'POST',
    data: postData,
    csrfmiddlewaretoken: csrfToken,
    dataType: 'json',
    success: function(data) { }
});

我一直在努力让这个工作:

var csrftoken = $.cookie('csrftoken');
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
});

但到目前为止,第一个解决方案已被证明是最有效的解决方案。

于 2013-04-15T08:06:56.203 回答