Я использую redux-oidc для авторизации, которая сохраняет токен доступа пользователя в хранилище.
Я прочитал этот пост о той же проблеме, но она не работает для меня.
До сих пор я пытался подойти к этому 2 разными способами. Сначала я попытался добавить следующее в мой файл App.js (поскольку он является корнем проекта)
if (store.getState().oidc.user && store.getState().oidc.user.access_token) {
token = store.getState().oidc.user.access_token;
setJWTToken(token);
}
, где setJWTToken
- это функция:
const setJWTToken = token => {
if (token) {
axios.defaults.headers.common["Authorization"] = token
} else {
delete axios.defaults.headers.common["Authorization"];
}
};
но он игнорируется, что и происходит, потому что пользователь не загружается во время начальной загрузки приложения. Итак, я переместил его в файл действий, думая, что на этом этапе пользователю потребуется авторизация
axios.defaults.headers.common["Authorization"] =
store.getState().oidc.user.access_token;
но я получаю сообщение об ошибке TypeError: Cannot read property 'access_token' of null
Используя инструменты Chatel и Response Dev в Chrome, я вижу, что токен находится в магазине - думаю, у меня просто возникают проблемы с тем, когда его вызывать. Если бы это был компонент, я бы сделал что-то вроде (! User) {return Loading ...
но я не хочу делать это на каждой странице. Куда я иду не так?