我试着
From React/S3 - 从外部站点(EC2)的主体中检索 CSRF
提交表单数据(电子邮件/密码)以及检索到的 CRSF 和指定数据库的自定义标题
重定向用户浏览器。
CSRF 参与进来
var xhr = new XMLHttpRequest();
xhr.onload = function() {
var csrfToken = this.responseXML.getElementsByName('csrf_token')[0].getAttribute('value');
}
xhr.open("GET", "url");
xhr.responseType = "document";
xhr.send();
并且页面重定向为
var req = new XMLHttpRequest();
req.onreadystatechange = function (aEvt) {
if (req.readyState == 4) {
if(req.status == 200)
document.write(req.responseText);
else
alert("Error loading page\n");
}
};
req.setRequestHeader("X-Odoo-dbfilter", 'data');
req.setRequestHeader("x-crsf-token", csrfToken);
req.send();
我已经能够提交带有以下内容的纯html表单;
const form = document.createElement('form');
form.method = method;
form.action = path;
for (const key in params) {
if (params.hasOwnProperty(key)) {
const hiddenField = document.createElement('input');
hiddenField.type = 'hidden';
hiddenField.name = key;
hiddenField.value = params[key];
form.appendChild(hiddenField);
}
}
document.body.appendChild(form);
form.submit();
但是结合这种逻辑一直存在问题。我正在努力寻找一种允许我提交表单数据、自定义标题和重定向用户的方法。在我最近的尝试中,我尝试使用 fetch
fetch('url', {
method: "POST", // *GET, POST, PUT, DELETE, etc.
mode: "no-cors", // no-cors, cors, *same-origin
cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
credentials: "include", // include, *same-origin, omit
headers: {
//"Content-Type": "application/json",
"Content-Type": "application/x-www-form-urlencoded",
"X-Odoo-dbfilter": "data"
},
redirect: "follow", // manual, *follow, error
referrer: "no-referrer", // no-referrer, *client
body: formData, // body data type must match "Content-Type" header
})
.then(response => {
if (response.redirected) {
window.location.href = response.url;
}
})
.catch(function(err) {
console.info('here be errors');
});
但仍然不清楚哪种方法最好。