gpt4 book ai didi

javascript - 如何使用 XMLHTTPRequest 处理 CSRF token ?

转载 作者:行者123 更新时间:2023-11-29 23:27:18 25 4
gpt4 key购买 nike

我正在使用受 CSRF 保护的 API。所以我需要调用 get 来获取 CSRF token ,然后传递相同的 token 来执行 POST 调用。

以下是我尝试过的方法,但我总是收到 CSRF token 验证失败作为对 POST 调用的响应。

var tryout = new XMLHttpRequest();
tryout.open("GET", "/api/1.0/csrf");
tryout.withCredentials = true;
tryout.setRequestHeader("x-csrf-token", "fetch");
tryout.setRequestHeader("Accept", "application/json");
tryout.setRequestHeader("Content-Type", "application/json; charset=utf-8");
tryout.onreadystatechange = function () {
console.log(this);
var csrfToken = this.getResponseHeader('x-csrf-token');
if(tryout.readyState == 4){
console.log(csrfToken);
tryout.open('POST', '/api/1.0/create');
tryout.setRequestHeader('x-csrf-token', this.getResponseHeader('x-csrf-token'));
tryout.onreadystatechange = function () {
console.log("call 2");
console.log(this.responseText);
};
tryout.send();
}
};
tryout.send();

我怀疑可能是 POST 调用正在启动新 session ,因此 CSRF 对该 session 无效。

请指导我如何在同一 session 中执行两个 xhr 调用?

最佳答案

我尝试使用 XMLHTTPRequest 对两个调用使用相同的 xhr 对象进行同步调用(获取 csrf token 和下一个 http post 调用在 header 中传递 csrf token 并且它有效。下面是示例代码。

var res = null;
var tryout = new XMLHttpRequest();
tryout.open("GET", "/odata/1.0/service.svc", false);
tryout.withCredentials = true;
tryout.setRequestHeader("x-csrf-token", "fetch");
tryout.setRequestHeader("Accept", "application/json");
tryout.setRequestHeader("Content-Type", "application/json; charset=utf-8");
tryout.send(null);

if(tryout.readyState === 4){
var csrfToken = tryout.getResponseHeader('x-csrf-token');

tryout.open('POST', '/odata/1.0/service.svc/Clients', false);
tryout.setRequestHeader('x-csrf-token', csrfToken);
tryout.setRequestHeader("Content-Type", "application/json; charset=utf-8");
tryout.setRequestHeader("Accept", "application/json");

tryout.send(JSON.stringify(obj));

if(tryout.readyState === 4){
res = JSON.parse(this.responseText);
}
}

关于javascript - 如何使用 XMLHTTPRequest 处理 CSRF token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48659892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com