我對這裏的許多作品(Django/Ajax等)都陌生,所以雖然我理解高級CSFR圖片,但我沒有完整的細節處理。Django中間件用HTTPS POST使用ajax拋出403錯誤
由於傳遞的數據量較大,我需要將GET請求轉換爲PUT。高級別,我正在通過HTTPS對django應用程序進行AJAX POST API調用。該呼叫是從頁面所在的同一個域進行的。
但是,我不斷收到'CSRF cookie未設置'的錯誤。
我使用Django 1.4
爲了突破CSRF保護,我已經包含了X-CSFRToken視爲頁眉其他職位提到這裏包括{{csrf_token}}在發佈數據標籤。但是,它看起來不像標籤被替換爲標記。 X-CSFRToken值在請求中作爲NULL發送。不知道爲什麼它沒有設置。
我的印象是,我不需要在頁面視圖中使用ensure_csrf_cookie(),因爲我在ajaxSetup中的POST之前獲取了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)}
})