【问题标题】:Axios post fails with 403 CSRF token validation failed but works fine in PostmanAxios 发布失败,403 CSRF 令牌验证失败,但在 Postman 中工作正常
【发布时间】:2019-11-06 02:22:20
【问题描述】:

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

【问题讨论】:

    标签: node.js axios


    【解决方案1】:

    我最近遇到了这个问题,一个对我有用的解决方案是添加一个带有来自初始响应 set-cookie 标头的 cookie 的 Cookie 标头。

    Postman 会自动执行此操作,但 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 标头,有必要将它们合并为一个。

    【讨论】:

    • 这应该被标记为正确答案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2012-05-16
    • 2020-12-02
    • 2020-05-04
    • 2015-01-10
    • 2014-11-15
    • 2020-08-07
    相关资源
    最近更新 更多