私はexpressjsでcsurfモジュールを使用しています。私はそれを次のように使用するので、それはすべての投稿要求に対して機能します。expressjsでAJAXリクエスト(Jqueryなし)でcsrfトークンを送信するには?
app.use(csrf());
res.locals.csrfToken = req.csrfToken();
この方法では、次のようなすべてのフォームで自動的に利用できます。
<input type="hidden" name="_csrf" value="<%=csrfToken%>">
が、どのように私は、私は以下のAJAX要求を送信するためのJS関数は、jqueryのを使用していないAJAX要求のcsrftokenを設定してください。私はcsrfトークンをhtml上で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'で完全なフォームデータを送信できます。 –