238 votes

Axios obtenir l'accès aux champs d'en-tête de réponse

Je suis en train de construire une interface d'application à Réagir et Redux et je suis à l'aide d' axios pour effectuer mes demandes. Je voudrais obtenir l'accès à tous les champs dans l'en-tête de la réponse. Dans mon navigateur, je peux inspecter l'en-tête et je vois que tous les champs dont j'ai besoin sont présents(comme jeton, uid, etc...), mais quand je l'appelle

const request = axios.post(`${ROOT_URL}/auth/sign_in`, props);
request.then((response)=>{
  console.log(response.headers);
});

J'ai juste

Object {content-type: "application/json; charset=utf-8", cache-control: "max-age=0, private, must-revalidate"}

Voici mon navigateur dans l'onglet réseau,comme vous pouvez le voir tous les autres champs sont présents.

enter image description here

Les records.

423voto

Nick Uraltsev Points 4551

Dans le cas de la SCRO demandes, les navigateurs ne peuvent accéder à la suivante en-têtes de réponse par défaut:

  • Cache-Control
  • Contenu De Langue
  • Content-Type
  • Expire
  • Dernière Modification
  • Pragma

Si vous souhaitez que votre application client pour être en mesure d'accéder à d'autres en-têtes, vous devez définir le Contrôle d'Accès-Exposer-en-tête en-tête sur le serveur:

Access-Control-Expose-Headers: Access-Token, Uid

25voto

cass_ Points 48

Cela m'a vraiment aidé, merci Nick Uraltsev pour votre réponse.

Pour ceux d'entre vous à l'aide de nodejs avec de la scro:

...
const cors = require('cors');

const corsOptions = {
  exposedHeaders: 'Authorization',
};

app.use(cors(corsOptions));
...

Dans le cas où vous êtes l'envoi de la réponse dans le chemin de res.header('Authorization', `Bearer ${token}`).send();

12voto

Daniel Azamar Points 11

J'ai été confrontée au même problème. Y a t-ce dans ma "WebSecurity.java" c'est à propos de la setExposedHeaders méthode dans la configuration de la scro.

@Bean
CorsConfigurationSource corsConfigurationSource() {

    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowCredentials(true);
    configuration.setAllowedOrigins(Arrays.asList(FRONT_END_SERVER));
    configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));
    configuration.setAllowedHeaders(Arrays.asList("X-Requested-With","Origin","Content-Type","Accept","Authorization"));

    // This allow us to expose the headers
    configuration.setExposedHeaders(Arrays.asList("Access-Control-Allow-Headers", "Authorization, x-xsrf-token, Access-Control-Allow-Headers, Origin, Accept, X-Requested-With, " +
            "Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"));

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

J'espère que cela fonctionne.

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