247 votes

Envoi du jeton porteur avec axios

Dans mon application react, j'utilise axios pour effectuer les requêtes REST api.

Mais il est incapable d'envoyer le Autorisation avec la demande.

Voici mon code :

tokenPayload() {
  let config = {
    headers: {
      'Authorization': 'Bearer ' + validToken()
    }
  }
  Axios.post( 
      'http://localhost:8000/api/v1/get_token_payloads',
      config
    )
    .then( ( response ) => {
      console.log( response )
    } )
    .catch()
}

Ici, le validToken() renvoie simplement le jeton depuis le stockage du navigateur.

Toutes les demandes reçoivent une réponse d'erreur 500 indiquant que

Le jeton n'a pas pu être analysé à partir de la demande.

depuis le back-end.

Comment envoyer l'en-tête d'autorisation avec chaque demande ? Recommandez-vous un autre module avec react ?

0 votes

Je ne pense pas que ce soit un axios problème. Vérifiez votre validToken() il renvoie quelque chose que votre serveur ne comprend pas.

0 votes

J'ai vérifié deux fois la fonction et j'ai aussi utilisé la chaîne de caractères au lieu de la fonction, mais c'est toujours pareil.

297voto

Doctor Points 831
const config = {
    headers: { Authorization: `Bearer ${token}` }
};

const bodyParameters = {
   key: "value"
};

Axios.post( 
  'http://localhost:8000/api/v1/get_token_payloads',
  bodyParameters,
  config
).then(console.log).catch(console.log);

Le premier paramètre est l'URL.
Le second est le corps JSON qui sera envoyé avec votre requête.
Le troisième paramètre est constitué des en-têtes (entre autres). Qui est aussi JSON.

7 votes

Vous avez oublié un espace entre porteur et jeton - alors ça marchera.

0 votes

Le poste de médecin : "clé : "valeur" a une citation qui devrait être enlevée... Mais en corrigeant cela, l'authentification a fonctionné pour mon application react-native.

1 votes

@mediaguru Merci pour le commentaire. Je l'ai corrigé (je suppose) ! La citation a dû être introduite par quelqu'un qui a édité la réponse...

147voto

Ilyas karim Points 1126

Voici une façon unique de définir le jeton d'autorisation dans axios. Définir la configuration à chaque appel axios n'est pas une bonne idée et vous pouvez changer le jeton d'autorisation par défaut par :

import axios from 'axios';
axios.defaults.baseURL = 'http://localhost:1010/'
axios.defaults.headers.common = {'Authorization': `bearer ${token}`}
export default axios;

Modifier Merci à Jason Norwood-Young.

Certaines API exigent que bearer soit écrit comme Bearer, donc vous pouvez le faire :

axios.defaults.headers.common = {'Authorization': `Bearer ${token}`}

Désormais, vous n'avez plus besoin de définir la configuration à chaque appel d'API. Maintenant, le jeton d'autorisation est défini à chaque appel axios.

34 votes

Bearer doit être mis en majuscule pour certaines API (j'ai découvert cela à la dure).

0 votes

Cette réponse devrait être acceptée. C'est une meilleure approche.

0 votes

Un grand merci pour cela.

49voto

Vous pouvez créer une configuration une fois et l'utiliser partout.

const instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'Authorization': 'Bearer '+token}
});

instance.get('/path')
.then(response => {
    return response.data;
})

0 votes

D'où vient la valeur du jeton dans cet exemple ? Pour mon application, le jeton serait renvoyé à l'API soit dans l'en-tête, soit dans le corps du message après une connexion réussie.

0 votes

C'est ici headers: {'Authorization': 'Bearer '+token}

0 votes

Comment transmettre des données s'il s'agit d'une demande POST ?

32voto

Nick Uraltsev Points 4551

Le deuxième paramètre de axios.post est data (pas config ). config est le troisième paramètre. Veuillez consulter ce document pour plus de détails : https://github.com/mzabriskie/axios#axiosposturl-data-config

15voto

Neel Patel Points 88

Si vous voulez obtenir des données après avoir passé un jeton dans l'en-tête, essayez ce code.

const api = 'your api'; 
const token = JSON.parse(sessionStorage.getItem('data'));
const token = user.data.id; /*take only token and save in token variable*/
axios.get(api , { headers: {"Authorization" : `Bearer ${token}`} })
.then(res => {
console.log(res.data);
.catch((error) => {
  console.log(error)
});

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