J'ai une application react / redux qui récupère un jeton sur un serveur api. Une fois que l'utilisateur s'est authentifié, j'aimerais que toutes les demandes axios aient ce jeton comme en-tête d'autorisation sans avoir à le joindre manuellement à chaque demande de l'action. Je suis assez nouveau pour réagir / redux et je ne suis pas sûr de la meilleure approche et je ne trouve pas de résultats de qualité sur Google.
Voici ma configuration redux:
// actions.js
import axios from 'axios';
export function loginUser(props) {
const url = `https://api.mydomain.com/login/`;
const { email, password } = props;
const request = axios.post(url, { email, password });
return {
type: LOGIN_USER,
payload: request
};
}
export function fetchPages() {
/* here is where I'd like the header to be attached automatically if the user
has logged in */
const request = axios.get(PAGES_URL);
return {
type: FETCH_PAGES,
payload: request
};
}
// reducers.js
const initialState = {
isAuthenticated: false,
token: null
};
export default (state = initialState, action) => {
switch(action.type) {
case LOGIN_USER:
// here is where I believe I should be attaching the header to all axios requests.
return {
token: action.payload.data.key,
isAuthenticated: true
};
case LOGOUT_USER:
// i would remove the header from all axios requests here.
return initialState;
default:
return state;
}
}
Mon jeton est stocké dans le magasin redux sous state.session.token.
Je ne sais pas trop comment procéder. J'ai essayé de créer une instance axios dans un fichier de mon répertoire racine et de mettre à jour / importer cela au lieu de node_modules, mais cela n'attache pas l'en-tête lorsque l'état change. Tous les commentaires / idées sont très appréciés, merci.