我通过$.ajax()
从HTTP上的页面向Django视图发送POST请求 - 我使用了提供here的CSRF的AJAX代码段。我可以在Firebug中将csrftoken cookie视为Secure
;我想这就是POST请求的X-Csrftoken
标头以null
的形式发送的原因。
有什么办法可以实际访问这个cookie的价值吗?我目前正在绕过403错误(因为POST
与空CSRF令牌标头一起发送),方法是将@csrf_exempt
添加到我的视图中 - 但是希望有适当的CSRF方法。
更新CLARITY:我不通过表单提交此数据。我只是在页面上加载javascript文件(包含AJAX调用)时发送POST。
答案 0 :(得分:3)
我为获得正确的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);
}
});
但到目前为止,第一个解决方案已被证明是最有效的解决方案。