我已经尝试了所有方法,但无法使Axios与SAP Odata Post服务一起使用。问题是CSRF令牌验证失败,但在Postman中工作正常。
我的请求如下:
const postNewTasks = async (body, headers) => (await axios.get(getHeadersandCFRSURL, {
headers: { 'authorization': auth, 'x-csrf-token': 'fetch' },
withCredentials: true
}).then((response) => {
axios({
method: 'POST',
url: postBatchOperationsURL,
headers: {
"Authorization": auth,
"Content-Type": "multipart/mixed; boundary=batch_1",
"X-CSRF-Token": response.headers["x-csrf-token"], // set CSRF Token for post or update
},
withCredentials: true,
body: body
}).then(function (response) {
console.log(response)
return response
}).catch(function (err) {
console.log(err)
return err
})
})
)
有人知道为什么该axios请求导致CSRF令牌验证失败吗?
答案 0 :(得分:0)
我最近遇到了这个问题,对我有用的解决方案是在初始响应Cookie
标头中添加一个set-cookie
标头和cookie。
邮递员会自动执行此操作,但axios似乎并非如此。我在"x-csrf-token":"fetch"
之后的那部分代码:
var xcsrftoken = response.headers["x-csrf-token"];
var cookies = '"';
for (var i = 0; i < response.headers["set-cookie"].length; i++) {
cookies += response.headers["set-cookie"][i] + ";";
}
cookies += '"';
axiosClient.defaults.headers.common[this.xcsrftokenName] = xcsrftoken;
axiosClient.defaults.headers.common["Cookie"] = cookies;
axiosClient
是由axios.create
制成的对象。我已将这些标头设置为默认标头,以便以后无需在请求中包括它们。还有多个set-cookie
标头,有必要将它们组合为一个。