Я делаю сайт с React и React Router с Redux. Требуется множество маршрутов (страниц). Я могу перенаправить на логин, если пользователь не зарегистрирован следующим образом:
function requireAuth(nextState, replace) {
let loggedIn = store.getState().AppReducer.UserReducer.loggedIn;
if(!loggedIn) {
replace({
pathname: '/login',
state: {
nextpathname: nextState.location.pathname
}
});
}
}
ReactDOM.render(
<Provider store={store}>
<Router history={history}>
<Route path="/" component={App}>
<IndexRoute component={Index} />
<Route path="login" component={Login} />
<Route path="register" component={Register} />
<Route path="dashboard" component={Graph} onEnter={requireAuth}>
... some other route requires logged in ...
</Route>
</Route>
</Router>
</Provider>,
document.getElementById('entry')
);
Пожалуйста, см. код, я использовал onEnter hook для перенаправления на маршрут "/login", если пользователь не вошел в систему. Данные для проверки входа пользователя в систему находятся в хранилище, и он будет обновляться после входа пользователя в систему.
Он работает отлично, но проблема в том, что когда я обновляю страницу, хранилище будет reset, и пользователь не войдет в состояние назад.
Я знаю, что это происходит, потому что хранилище Redux - это просто память, поэтому страница refesh потеряет все данные.
Проверка сеанса сервера при каждом обновлении может работать, но это может быть слишком большой запрос, так что выглядит плохой идеей.
Сохранять зарегистрированные данные состояния в localStorage, возможно, будет работать, но в этом случае я должен проверить, не вызваны ли все вызовы AJAX, что запрос отклонен, потому что сеанс истек или не существует как что-то, и это также выглядит плохой идеей.
Есть ли способ более четко решить эту проблему? Мой сайт будет использовать много людей, поэтому я хочу как можно скорее уменьшить XHR-запросы.
Любые советы будут очень оценены.