¿Cómo puedo enviar un encabezado de autenticación con un token a través de axios.js? He intentado algunas cosas sin éxito, por ejemplo:
const header = `Authorization: Bearer ${token}`;
return axios.get(URLConstants.USER_URL, { headers: { header } });
Me da este error:
XMLHttpRequest cannot load http://localhost:8000/accounts/user/. Request header field header is not allowed by Access-Control-Allow-Headers in preflight response.
Me las arreglé para que funcione estableciendo el valor predeterminado global, pero supongo que esta no es la mejor idea para una sola solicitud:
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
Actualización:
La respuesta de Cole me ayudó a encontrar el problema. Estoy usando el middleware django-cors-headers que ya maneja el encabezado de autorización de forma predeterminada.
Pero pude entender el mensaje de error y solucioné un error en mi código de solicitud de axios, que debería verse así
return axios.get(URLConstants.USER_URL, { headers: { Authorization: `Bearer ${data.token}` } });
fuente
return axios.get(URLConstants.USER_URL, { headers: { Authorization: `Bearer ${data.token}` } });
Prueba esto :
axios.get( url, {headers: { "name" : "value" } } ) .then((response) => { var response = response.data; }, (error) => { var status = error.response.status } );
fuente
Esto me ha funcionado:
let webApiUrl = 'example.com/getStuff'; let tokenStr = 'xxyyzz'; axios.get(webApiUrl, { headers: {"Authorization" : `Bearer ${tokenStr}`} });
fuente
En lugar de agregarlo a cada solicitud, puede agregarlo como una configuración predeterminada así.
axios.defaults.headers.common['Authorization'] = `Bearer ${access_token}`
fuente
Estás casi en lo correcto, solo ajusta tu código de esta manera
const headers = { Authorization: `Bearer ${token}` }; return axios.get(URLConstants.USER_URL, { headers });
observe dónde coloco las comillas invertidas, agregué '' después de Bearer, puede omitir si se asegura de manejar en el lado del servidor
fuente
-
), entre el esquema de autenticación y el token. Nunca he visto ningún tipo de servidor que requiera un guión como ha mostrado, y la mayoría, si no todos, enviarían un error si se proporciona uno.En lugar de llamar a la función axios.get, use:
axios({ method: 'get', url: 'your URL', headers: { Authorization: `Bearer ${token}` } })
fuente
Puedes probar esto.
axios.get( url, {headers: { "Access-Control-Allow-Origin" : "*", "Content-type": "Application/json", "Authorization": `Bearer ${your-token}` } } ) .then((response) => { var response = response.data; }, (error) => { var status = error.response.status } );
fuente
res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,OPTIONS,Accept,Authorization, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers');
este cambio ha solucionado mi problema, ¡inténtalo!
fuente
Instala el
cors
middleware. Intentábamos resolverlo con nuestro propio código, pero todos los intentos fallaron estrepitosamente.Esto lo hizo funcionar:
cors = require('cors') app.use(cors());
Enlace original
fuente