저는 여기 (Django/Ajax 등)에서 많은 부분을 다룹니다. 따라서 고급 CSFR 그림을 이해하는 동안 세부 사항을 완벽하게 이해하지 못합니다.Django 미들웨어는 ajax를 사용하여 HTTPS POST에서 403 오류를 발생합니다.
더 많은 양의 데이터가 전달되기 때문에 GET에서 PUT으로 요청을 변환해야했습니다. 높은 수준, 나는 HTTPS를 통해 장고 응용 프로그램에 AJAX POST API 호출을 만들고 있습니다. 호출은 페이지가 제공되는 도메인과 동일하게 만들어집니다.
그러나 'CSRF 쿠키가 설정되지 않았습니다'오류가 계속 발생합니다. 헤더에 여기에 다른 게시물에 언급 된 게시 된 데이터에 {{csrf_token}} 태그를 포함 나는이 CSRF 보호를지나 얻으려면
장고 1.4을 사용하고
은, 나는 X-CSFRToken을 포함했다. 그러나 태그가 토큰으로 대체되는 것처럼 보이지 않습니다. 요청시 X-CSFRToken 값이 NULL로 전송됩니다. 왜 그것이 나던가 설정 모르겠어요.
나는 ajaxSetup의 POST 전에 쿠키를 얻을 때 페이지 뷰에서 ensure_csrf_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)}
})