En mi aplicación de reacción, estoy usando axios para realizar las solicitudes de API REST.
Pero no puede enviar el encabezado de autorización con la solicitud.
Aquí está mi código:
tokenPayload() {
let config = {
headers: {
'Authorization': 'Bearer ' + validToken()
}
}
Axios.post(
'http://localhost:8000/api/v1/get_token_payloads',
config
)
.then( ( response ) => {
console.log( response )
} )
.catch()
}
Aquí, el validToken()
método simplemente devolvería el token del almacenamiento del navegador.
Todas las solicitudes tienen una respuesta de error 500 que dice que
No se pudo analizar el token de la solicitud
desde el back-end.
¿Cómo enviar el encabezado de autorización con cada solicitud? ¿Recomendarías algún otro módulo con react?
axios
problema en absoluto. verifique suvalidToken()
función, devuelve algo que su servidor no entiende.Respuestas:
El primer parámetro es la URL.
El segundo es el cuerpo JSON que se enviará junto con su solicitud.
El tercer parámetro son los encabezados (entre otras cosas). Que es JSON también.
fuente
Bearer
debería usarse con B mayúscula, ¿no?Esta es una forma única de configurar el token de autorización en axios. Establecer la configuración para cada llamada de axios no es una buena idea y puede cambiar el token de autorización predeterminado de la siguiente manera:
Editar , gracias a Jason Norwood-Young.
Algunas API requieren que el portador se escriba como Portador, por lo que puede hacer:
Ahora no es necesario establecer la configuración para cada llamada a la API. Ahora el token de autorización está configurado para cada llamada de axios.
fuente
Bearer
debe escribirse en mayúscula para algunas API (descubrí de la manera difícil).El segundo parámetro de
axios.post
esdata
(noconfig
).config
es el tercer parámetro. Consulte esto para obtener más detalles: https://github.com/mzabriskie/axios#axiosposturl-data-configfuente
Puede crear la configuración una vez y usarla en todas partes.
fuente
headers: {'Authorization': 'Bearer '+token}
const instance = (token) => axios.create({ baseURL: `${config.API_URL}`, timeout: 1000, headers :{ 'authorization': 'Bearer ' + token } })
Utilizando el interceptor Axios:
fuente
Si desea algunos datos después de pasar el token en el encabezado, pruebe este código
fuente
Esto funciona y necesito configurar el token solo una vez en mi
app.js
:Entonces puedo realizar solicitudes en mis componentes sin volver a configurar el encabezado.
"axios": "^0.19.0",
fuente
axios
por sí mismo viene con dos "métodos" útilesinterceptors
que no son más que middlewares entre la solicitud y la respuesta. así que si en cada solicitud desea enviar el token. Utilice elinterceptor.request
.Hice un paquete que te ayuda:
Ahora puedes usar axios como clase
Me refiero a que la implementación del
middleware
depende de ti, o si prefieres crear tu propioaxios-es6-class
https://medium.com/@enetoOlveda/how-to-use-axios-typescript-like-a-pro-7c882f71e34a es el medio publicar de donde vinofuente
Esto es lo que también enfrenté. El token que estás pasando no es correcto.
Simplemente codifique el token y pase, obtendrá la respuesta correcta. Pero si el token no se pasa entre comillas simples '', seguramente fallará. Debe estar en formato 'Autorización': 'Portador YzE5ZTdiMjVlYzM5NjA2MGJkZTM5NjVlOTQ5YMmQ5ZjMwYjA0YmEzZmZjN2I1MmI4MDJkNQ', donde después de Portador debe estar presente un espacio, también entre comillas simples.
IMP: El código anterior funcionará, pero si publica algo como:
'Autorización': 'Portador' + YzE5ZTdiMjVlYzM5NjA2MGJkZTM5NjVlOTQ5YMmQ5ZjMwYjA0YmEzZmZjN2I1MmI4MDJkNQ, fallará
o ----- el siguiente código también fallará, espero que entiendas la diferencia básica
fuente