3 votes

Le message d'Axios échoue avec le message 403 CSRF token validation failed mais fonctionne bien dans Postman.

J'ai tout essayé et je n'arrive pas à faire fonctionner Axios avec les services SAP Odata Post. Le problème est que la validation du jeton CSRF échoue alors qu'elle fonctionne parfaitement dans Postman.

Ma demande ressemble à ceci :

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
      })
    })
    )

Quelqu'un a-t-il une idée de la raison pour laquelle la validation du jeton CSRF échoue avec cette requête axios ?

2voto

aizaku Points 31

J'ai eu ce problème récemment et une solution qui a fonctionné pour moi a été d'ajouter un Cookie avec les cookies de la réponse initiale set-cookie les en-têtes.

Postman le fait automatiquement, mais axios ne le fait pas, semble-t-il. Mon code de cette partie après "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 est l'objet fabriqué à partir de axios.create . J'ai défini ces en-têtes par défaut afin de ne pas avoir à les inclure ultérieurement dans les requêtes. Il y avait plusieurs set-cookie et il était nécessaire de les combiner en un seul.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X