Dans mon application React, j'utilise axios pour exécuter les requêtes API REST.
Mais il ne peut pas envoyer l'en- tête d' 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, la validToken()
méthode renvoie simplement le jeton du stockage du navigateur.
Toutes les demandes ont une réponse d'erreur de 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? Recommanderiez-vous un autre module avec react?
axios
problème. vérifiez votrevalidToken()
fonction, elle renvoie quelque chose que votre serveur ne comprend pas.Réponses:
Le premier paramètre est l'URL.
Le second est le corps JSON qui sera envoyé avec votre demande.
Le troisième paramètre sont les en-têtes (entre autres). Ce qui est également JSON.
la source
Bearer
devrait être utilisé avec B majuscule, n'est-ce pas?Voici une façon unique de définir un jeton d'autorisation dans axios. Définir la configuration pour chaque appel axios n'est pas une bonne idée et vous pouvez modifier le jeton d'autorisation par défaut en:
Edit , merci à Jason Norwood-Young.
Certaines API exigent que le porteur soit écrit en tant que porteur, vous pouvez donc faire:
Vous n'avez plus besoin de définir la configuration pour chaque appel d'API. Désormais, le jeton d'autorisation est défini sur chaque appel axios.
la source
Bearer
doit être capitalisé pour certaines API (j'ai découvert à la dure).Le deuxième paramètre de
axios.post
estdata
(nonconfig
).config
est le troisième paramètre. Veuillez consulter ceci pour plus de détails: https://github.com/mzabriskie/axios#axiosposturl-data-configla source
Vous pouvez créer une configuration une fois et l'utiliser partout.
la source
headers: {'Authorization': 'Bearer '+token}
const instance = (token) => axios.create({ baseURL: `${config.API_URL}`, timeout: 1000, headers :{ 'authorization': 'Bearer ' + token } })
En utilisant l'intercepteur Axios:
la source
Si vous voulez des données après avoir passé le jeton dans l'en-tête, essayez ce code
la source
Cela fonctionne et je n'ai besoin de définir le jeton qu'une seule fois dans mon
app.js
:Ensuite, je peux faire des requêtes dans mes composants sans redéfinir l'en-tête.
"axios": "^0.19.0",
la source
axios
en lui-même vient avec deux «méthodes» utilesinterceptors
qui ne sont que des middlewares entre la requête et la réponse. donc si à chaque demande vous souhaitez envoyer le token. Utilisez leinterceptor.request
.J'ai fait un pack qui vous aide:
Vous pouvez maintenant utiliser axios comme classe
Je veux dire que la mise en œuvre du
middleware
dépend de vous, ou si vous préférez créer votre propreaxios-es6-class
https://medium.com/@enetoOlveda/how-to-use-axios-typescript-like-a-pro-7c882f71e34a c'est le support poster d'où il vientla source
C'est ce à quoi j'ai également été confronté. Le jeton que vous passez n'est pas correct.
Il suffit de coder en dur le jeton et de le transmettre, vous obtiendrez la réponse correcte. Mais si le jeton n'est pas passé entre guillemets simples '', il échouera sûrement. Il doit être au format 'Autorisation': 'Porteur YzE5ZTdiMjVlYzM5NjA2MGJkZTM5NjVlOTQ5YMmQ5ZjMwYjA0YmEzZmZjN2I1MmI4MDJkNQ', où après le porteur un espace doit être présent, également entre des guillemets simples très importants.
IMP: Le code ci-dessus fonctionnera Mais si vous publiez quelque chose comme:
'Autorisation': 'Bearer' + YzE5ZTdiMjVlYzM5NjA2MGJkZTM5NjVlOTQ5YMmQ5ZjMwYjA0YmEzZmZjN2I1MmI4MDJkNQ, cela échouera
ou ----- le code ci-dessous échouera également, j'espère que vous comprenez la différence fondamentale
la source