Django中间件使用ajax在HTTPS POST中抛出403错误
我对这里的许多作品都是新手(Django/Ajax等),所以虽然我了解高级CSFR图片,但我对细节没有完全的把握 由于传递的数据量较大,我需要将GET的请求转换为PUT。在高层,我正在通过HTTPS对django应用程序进行AJAX POST API调用。调用是从服务页面的同一域进行的 但是,我不断收到“CSRF cookie未设置”错误 我正在使用Django 1.4 为了通过CSRF保护,我在标题中包含了其他文章中提到的X-CSFRToken,并在发布的数据中包含了{CSRF_token}}标记。但是,该标记看起来并没有被令牌替换。X-CSFRToken值在请求时作为NULL发送。不知道为什么它没有设置好 我的印象是,我不需要在页面视图中使用sure_csrf_cookie(),因为我在ajaxSetup中发布文章之前就已经获得了cookie,但我也尝试过了 你知道我做错了什么吗 相关代码:Django中间件使用ajax在HTTPS POST中抛出403错误,ajax,django,post,https,django-csrf,Ajax,Django,Post,Https,Django Csrf,我对这里的许多作品都是新手(Django/Ajax等),所以虽然我了解高级CSFR图片,但我对细节没有完全的把握 由于传递的数据量较大,我需要将GET的请求转换为PUT。在高层,我正在通过HTTPS对django应用程序进行AJAX POST API调用。调用是从服务页面的同一域进行的 但是,我不断收到“CSRF cookie未设置”错误 我正在使用Django 1.4 为了通过CSRF保护,我在标题中包含了其他文章中提到的X-CSFRToken,并在发布的数据中包含了{CSRF_token}}
siteUrl = "https://localhost:8443/"
$.ajaxSetup({
beforeSend: function(xhr, settings) {
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
if (new RegExp("^"+siteUrl.replace("\\","\\\\")+".*").test(settings.url)) {
// Only send the token to URLs from our site.
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
}
}
});
$.ajax({
url: submitUrl,
data: {'network_ids': JSON.stringify(network_ids),
'csrfmiddlewaretoken': '{{ csrf_token }}'},
type: 'POST',
crossDomain: true,
dataType: 'json',
cotentType: 'application/json',
success: function(mydata) {
console.log(mydata);
},
error: function(jqXHR, textStatus, errorThrown) {alert(textStatus); alert(errorThrown)}
})
siteUrl=”https://localhost:8443/"
$.ajaxSetup({
发送前:功能(xhr、设置){
函数getCookie(名称){
var-cookieValue=null;
if(document.cookie&&document.cookie!=''){
var cookies=document.cookie.split(“;”);
对于(变量i=0;i
您的js是通过Django的模板引擎提供的吗?否则,{{csrf\u token}}
将不会被计算。您是否检查过它是否已实际发布到服务器
另外,根据该协议,ajaxSend
事件背后的想法是,您不必显式地传递csrf\u令牌
我注意到您的ajax设置与文档中的设置略有不同。这可能是正确的,但是我会从文档中复制原件。您有几个选择:
此代码清单显示如何从cookie获取CSRF令牌:
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
getCookie('csrftoken');
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def my_view(request):
return HttpResponse('Hello world')