Я довольно новичок в React и пытаюсь выучить его, но у меня сильный опыт работы с бэкэндами (java / nodejs / php /...)
Итак, сначала я хотел создать портал авторизации, в основном 3 страницы:
- Домашняя страница, которая перенаправляет вас на страницу входа, если вы не авторизованы
- Страница авторизации
- Страница регистрации
Функции работают (регистрация / вход / выход)
Моя проблема на Домашней странице, если я сначала войду с user1, я увижу Hello user1. Если я выйду из системы и войду с помощью user2, я все равно увижу user1.
Кажется, переменная как-то кешируется браузером.
Обновление F5 фактически обновляет значение ...: /
Вот что я сделал:
В моем приложении у меня есть этот маршрут:
<Provider store={store}>
<HashRouter>
<Switch>
<Route path="/login" name="Login" component={Login} />
<Route path="/register" name="Register" component={Register} />
<PrivateRoute path="/" name="Home" component={Layout} />
</Switch>
</HashRouter>
</Provider>
Поставщик configureStore выполняет:
store.dispatch(requestUserInfo());
И этот requestUserInfo () я создал в следующем классе
Я получаю токен, декодирую его с помощью jwt и отображаю некоторую информацию о пользователе:
import jwt_decode from 'jwt-decode'
export const REQUEST_USER = "REQUEST_USER";
export const USER_INFO = "USER_INFO";
export function requestUserInfo() {
if(localStorage.usertoken){
const decoded = jwt_decode(localStorage.usertoken)
let usertest = {
"username": decoded.first_name + " " + decoded.last_name,
"picture": "assets/img/avatars/test.png",
"activity": 1
}
return dispatch => {
dispatch({
type: USER_INFO,
payload: usertest
});
};
} else {
return dispatch => {
dispatch({
type: USER_INFO,
payload: {"username": "","picture": "","activity": 0}
});
};
}
}
export default function isLogged() {
let status = false
if(localStorage.usertoken){
try{
if(jwt_decode(localStorage.usertoken)){
status = true;
}
} catch(e){
console.log(e)
}
}
return status
}
При выходе из системы я удаляю токен, выполняя:
localStorage.removeItem ( 'usertoken')
Редактировать: при попытке сделать первый вход в личную вкладку ничего не отображается, переменные пусты. Похоже, мои переменные установлены после рендеринга, может быть?
Edit2: я положил все на github, чтобы было легче отлаживать: https://github.com/senechalm/learning-reactjs
У кого-нибудь есть идеи / предложения по исправлению этой проблемы / ошибки?