Я работаю в системе аутентификации в React-Redux. После успешного входа в систему я хочу сохранить текущие данные. Я не могу сделать это правильно.
КОД ДЕЙСТВИЙ:
// ** LOGIN USER **
export const login = ({ email, password }) => (dispatch) => {
const body = JSON.stringify({ email, password });
axios
.post('/login', body, getHeaders())
.then(console.log(body))
.then((res) => {
dispatch({
type: LOGIN_SUCCESS,
payload: res.data,
});
history.push('/');
})
.then(() => {
dispatch({
type: USER_LOADED,
});
})
.catch((err) => {
console.log(err);
dispatch(returnErrors(err.message, err.id, 'LOGIN_FAIL'));
dispatch({
type: LOGIN_FAIL,
});
});
};
Как сохранить пользовательские данные в типе USER_LOADED? Он работает только до первой перезагрузки.
КОД СНИЖЕНИЯ:
const initialState = {
token: localStorage.getItem('token'),
isAuthenticated: null,
isLoading: false,
user: null,
profileInitialized: false,
profileData: null,
};
export default function (state = initialState, action) {
switch (action.type) {
// USER AUTHENTICATION
case USER_LOADING:
return {
...state,
isLoading: true,
};
case USER_LOADED:
return {
...state,
...action.payload,
isAuthenticated: true,
isLoading: false,
};
case LOGIN_SUCCESS:
case REGISTER_SUCCESS:
localStorage.setItem('token', action.payload.token);
return {
...state,
...action.payload,
isAuthenticated: true,
isLoading: false,
};
case AUTH_ERROR:
case LOGIN_FAIL:
case LOGOUT_SUCCESS:
case REGISTER_FAIL:
localStorage.removeItem('token');
+++
Я должен добавить, что JWT остается после перезагрузки таким образом, пользователь подключен, но имя пользователя не указано, например.
Сразу после перенаправления входа в систему
После перезагрузки
I знаю, что код
.then(() => {
dispatch({
type: USER_LOADED,
});
})
неверен, но я не знаю, как заставить его работать