Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django中间件使用ajax在HTTPS POST中抛出403错误_Ajax_Django_Post_Https_Django Csrf - Fatal编程技术网

Django中间件使用ajax在HTTPS POST中抛出403错误

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}}

我对这里的许多作品都是新手(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,但我也尝试过了

你知道我做错了什么吗

相关代码:

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')