У меня возникли проблемы с проверкой подлинности с помощью редукса и реагирования на маршрутизатор, и я надеюсь получить некоторые пояснения о том, как наилучшим образом решить мою проблему.
У меня есть компонент входа, который при отправке отправляет следующее действие:
export const loginUser = (creds) => {
return dispatch => {
dispatch(requestLogin(creds))
return fetch('http://127.0.0.1:4000/api/login', {
...
})
.then(res => {
dispatch(receiveLogin())
browserHistory.push('/admin')
...
})
...
}
}
Действие receiveLogin обновляет флаг isAuthenticated в состоянии true. В моем защищенном маршруте есть следующий привязчик:
export default (state) => {
return {
path: '/',
component: App,
childRoutes: [
{
path: 'protected',
component: Protected,
...
onEnter(nextState, replaceState) {
const loggedIn = //check state.isAuthenticated
if (!loggedIn) {
replaceState(null, 'login')
}
}
}
]
}
}
Как вы можете видеть, я передаю состояние в качестве аргумента. Это дает мне доступ к исходному состоянию как с сервера, так и с клиента. Однако после того, как мое действие для входа произойдет, очевидно, что hook onEnter все равно будет использовать начальное состояние.
То, что я хочу знать, - лучший способ получить текущее состояние после обновления флажка isAuthenticated и использовать его вместо моего байта onEnter. Или, мой подход полностью испорчен, и должен ли я делать это по-другому?