Axios发布失败,并显示403 CSRF令牌验证失败,但在Postman中工作正常

时间:2019-05-07 12:03:50

标签: node.js axios

我已经尝试了所有方法,但无法使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令牌验证失败吗?

1 个答案:

答案 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标头,有必要将它们组合为一个。