CSRF令牌未添加到XMLhttpRequest的标头中。
为了确保所有其他代码都能正常工作,我尝试对服务器使用GET请求,并且一切正常。但是,当我将CSRF令牌添加到标头时,添加标头时代码将停止运行。
// [PROBLEM CODE]
// Initialize new request
const request = new XMLHttpRequest();
const currency = document.querySelector('#currency').value;
request.setRequestHeader({'csrfmiddlewaretoken': csrftoken}); // [<---HERE]
request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); // [<---HERE]
request.open('POST', '/convert');
// [THIS WORKS]
// Initialize new request
const request = new XMLHttpRequest();
const currency = document.querySelector('#currency').value;
request.open('GET', '/convert');
request.send();
当我取出两个问题代码行时,请setRequestHeader并发出POST请求。我收到的错误消息是“禁止(CSRF令牌丢失或不正确。):/ convert”
最佳答案
您没有传递setRequestHeader
对象,而是传递了header
和value
。参见文档here。
我相信reading this应该是'X-CSRFToken'
。
同样,在设置请求标头之前,您需要将请求设置为打开。
如果将其更新为以下内容,则应该可以使用。
request.open('POST', '/convert');
request.setRequestHeader("X-CSRFToken", csrftoken);
request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
request.send();
关于javascript - 无法将CSRF token 添加到Django POST请求的XMLhttpRequest中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57516816/