我在expressjs中使用csurf模塊。它適用於所有發佈請求,因爲我按以下方式使用它。如何在expressjs中的AJAX請求(無Jquery)中發送csrf標記?
app.use(csrf());
res.locals.csrfToken = req.csrfToken();
這樣它的自動可用在所有形式,我有以下。
<input type="hidden" name="_csrf" value="<%=csrfToken%>">
,但我怎麼設置AJAX請求csrftoken,我不使用jQuery,下面是JS函數來發送Ajax請求。我確實在html上提供了csrf標記作爲隱藏值,我可以通過getElementByID訪問它。
注:我可以,如果我禁用CSRF發送請求。
function voteQuestion() {
var qid = document.getElementById("qid").value;
var csrf = document.getElementById("csrf").value;
var http = new XMLHttpRequest();
var url = "https://stackoverflow.com/q/ajaxcall";
var params = "qid="+ qid;
http.open("POST", url);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.onreadystatechange = function() {
if(http.readyState == XMLHttpRequest.DONE && http.status == 200) {
var json = (http.responseText);
var obj = JSON.parse(json);
document.getElementById("vote-sp").innerHTML = (obj.upvotes);
}
};
http.send(params);
}
您可以使用FormData()對象通過CsrfToken發送完整的表單數據。 –