J'ai une application react/redux qui récupère un jeton depuis un serveur api. Après l'authentification de l'utilisateur, j'aimerais que toutes les demandes axios aient ce jeton comme en-tête d'autorisation sans avoir à le joindre manuellement à chaque demande dans l'action. Je suis assez nouveau dans react/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 mon installation 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 redux store sous state.session.token
.
Je suis un peu perdu sur la façon de procéder. J'ai essayé de faire un instance d'axios dans un fichier de mon répertoire racine et de le mettre à jour/importer au lieu de le faire à partir de node_modules, mais il ne joint pas l'en-tête lorsque l'état change. Tout commentaire ou idée est le bienvenu, merci.
0 votes
Où stockez-vous le jeton d'autorisation après qu'il ait été reçu du serveur ? localStorage ?
0 votes
Dans le magasin redux session.token