ybd*_*ire 5 python django csrf django-csrf
我开发了一个 Django 文件上传 API,它接收来自客户端的发布数据并将数据保存为文件。
根据Django CSRF 手册,HTTP 请求标头应使用 csrftoken cookie 值设置 X-CSRFToken。我已经通过下面的代码设置了 X-CSRFToken,但是 Django 服务器仍然禁止 POST 请求(403),如下图所示。
$(document).ready(function(){
var authid
$.get("http://localhost:8000/v1/getAuthID?username=testuser1&password=123", function(data){
authid = data["authid"];
var csrftoken = $.cookie('csrftoken');
console.log(csrftoken);
$.ajaxSetup({
beforeSend: function(xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
});
url = "http://localhost:8000/v1/file".replace("{authid}", authid).replace("{token}", csrftoken)
$.post(url, function(data){
})
})
})
Run Code Online (Sandbox Code Playgroud)
您是如何通过向 Django 服务器发送 POST 请求来克服 Django CSRF 的?
谢谢!
将 ajaxSetup 移到 AJAX 成功函数之外,因为请求需要它,而不是在请求之后。
$(document).ready(function(){
var authid;
var csrftoken = $.cookie('csrftoken');
console.log(csrftoken);
$.ajaxSetup({
beforeSend: function(xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
});
$.get("http://localhost:8000/v1/getAuthID?username=testuser1&password=123", function(data){
authid = data["authid"];
url = "http://localhost:8000/v1/file".replace("{authid}", authid).replace("{token}", csrftoken)
$.post(url, function(data){
})
})
})
Run Code Online (Sandbox Code Playgroud)