2017-06-29 1 views
5

Est-il possible, en utilisant le fetch API, de définir des en-têtes par défaut pour chaque requête?
Ce que je veux faire est de définir un en-tête Authorization chaque fois qu'il y a un jeton web json dans le localStorage. Ma solution actuelle est de définir les en-têtes avec cette fonction: Définir l'en-tête par défaut pour chaque requête fetch()

export default function setHeaders(headers) { 
    if(localStorage.jwt) { 
     return { 
      ...headers, 
      'Authorization': `Bearer ${localStorage.jwt}` 
     } 
    } else { 
     return headers; 
    } 
} 

Réglage des en-têtes dans une demande de récupération doit ressembler à ceci:

return fetch('/someurl', { 
     method: 'post', 
     body: JSON.stringify(data), 
     headers: setHeaders({ 
      'Content-Type': 'application/json' 
     }) 
    }) 

Mais il doit y avoir une meilleure façon de faire ce. Je développe actuellement une application React/Redux/Express si cela aide.

+0

Si pour une raison quelconque, vous ne souhaitez pas utiliser les emballages existants vont chercher autour, écrire à ajouter en-tête d'autorisation devrait être simple. –

Répondre

3

Vous pouvez utiliser Axios au lieu de chercher, avec Interceptor

const setAuthorization = (token) => { 

    api.interceptors.request.use((config) => { 
    config.headers.Authorization = 'Bearer ' + token; 
    return config; 
    }); 

} 

Où Api est un objet Axios avec une URL de base

const api= axios.create({ 
    baseURL: 'http://exemple.com' 
}); 

Et quand vous obtenez votre jeton, u suffit d'appeler la fonction setAuthorization.

Source: Axios README.md