2012-10-26 12 views
7

csrfmiddlewaretoken मान प्राप्त करने के लिए django documentation से getCookie फ़ंक्शन का उपयोग करता हूं।अजाक्स, सीएसआरएफ और डेलेटे

var url = reverse_removeprofile.replace(/deadbeef/, key); 
$.ajax({ 
    type:   "DELETE", 
    url:   url, 
    data:   "csrfmiddlewaretoken=" + getCookie("csrftoken"), 
    success:  function() { ... }, 
}); 

जब इस कोड का निष्पादित तो django एक 403 अपवाद मुझे बता कि CSRF सत्यापन विफल को जन्म देती है:

मैं निम्नलिखित ajax फोन है। हालांकि, अगर मैं DELETE से POST में बदलता हूं तो django इसके बारे में खुश है और शिकायत नहीं करता है।

मैं वास्तव में इस बारे में गूगल में कुछ उपयोगी ढूँढने में सक्षम नहीं था, लेकिन मैं इस (अब बंद कर दिया और तय) के टिकट मिल गया है: https://code.djangoproject.com/ticket/15258

तो इस मुद्दे में तय किया गया है, तो मैं इसे सही ढंग से समझ 1.4 मील का पत्थर मैं django 1.4 का उपयोग करता हूं लेकिन फिर भी मैं DELETE अनुरोध के साथ सीएसआरएफ टोकन को सत्यापित नहीं कर सकता।

क्या मुझे यहां कुछ याद आ रही है?

उत्तर

19

यह एक jQuery बग, करने के लिए किया गया डेटा यूआरएल (GET अनुरोध की तरह) या अनुरोध शरीर (एक पोस्ट की तरह) के साथ संलग्न किया जाना चाहिए कि क्या के रूप में कुछ भ्रम की स्थिति की वजह से

this bug report देखें प्रतीत होता है।

आप शायद अनुरोध पर X-CSRFToken शीर्षलेख सेट करने के लिए AJAX कॉल के लिए वैकल्पिक सीएसआरएफ विधि का उपयोग करके इसे प्राप्त कर सकते हैं। इस तरह दिखने के लिए अपने AJAX कॉल को बदलने का प्रयास करें:

$.ajax({ 
    type: "DELETE", 
    url: url, 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("X-CSRFToken", getCookie("csrftoken")); 
    } 
    success: function() { ... }, 
}); 
+0

बहुत बहुत धन्यवाद! इसने समस्या हल की :) और वहां मैं सीएसआरएफ-मिडलवेयर सामान को दोषी ठहरा रहा था। – Pablo

+0

वाह। मैंने खुद को कभी नहीं सोचा होगा। धन्यवाद। –

संबंधित मुद्दे