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对象,而是传递了headervalue。参见文档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/

10-12 01:34
查看更多