簡體   English   中英

CSRF令牌丟失或不正確的django

[英]CSRF token missing or incorrect django

我正在嘗試使用.ajax將一些數據發送到視圖,但我收到的CSRF令牌丟失或錯誤不正確。 我已將@ensure_csrf_cookie裝飾器添加到視圖中,該視圖呈現頁面以確保存在csrf cookie。 我正在使用Django 1.10.5和jquery 3.1.1

使用Javascript

var csrftoken = Cookies.get('csrftoken');

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

function updateWaypoints(){

  var routeArray =Array(),
  routeArray =  control.getWaypoints();
  routeArray.push({route_id:routeId});
  console.log(routeArray);
  console.log(JSON.stringify(routeArray));
  var newData = JSON.stringify(routeArray);

  $.ajax({
         type: 'POST',
         url: '/routes/savemaproute/',
         data: newData,
     });
}

它發送到的視圖功能:

@login_required
def save_map_route(request):
    if request.user in route.owner_user.all():
        if request.POST:
            recieved_json_data = request.POST['data']
            route_id = request.POST['route_id']
            route = get_object_or_404(Route, pk=route_id)
            route.map_waypoints = recieved_json_data
            route.save()
            return HttpResponseRedirect(reverse('route:details', args=(route_new.pk,)))

urls.py

urlpatterns =[
    url(r'^$', views.index, name='index'),
    url(r'^savemaproute/$', views.save_map_route, name='save_map_route'),
    ]

您只是在發送到視圖的數據中缺少csrftoken

  var routeArray =Array(),
  routeArray =  control.getWaypoints();
  routeArray.push({route_id:routeId});
  console.log(routeArray);
  console.log(JSON.stringify(routeArray));
  var newData = JSON.stringify(routeArray);

您已定義了csrftoken變量,但它未包含在newData

您的newData對象應如下所示:

{
    // ... your key-value pairs
    csrftoken: csrftoken
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM