나는 Redux가있는 React and React Router로 웹 사이트를 만들고있다. 경로 (페이지)의 제비가 로그인이 필요합니다 사용자가이 같은 로그인하지 않은 경우 내가 로그인 리디렉션 할 수 있습니다.React Router에서 로그인 상태를 유지하는 방법에도 페이지를 새로 고침 하시겠습니까?
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 사용 로그인하지 않은 사용자를 확인하는 데이터는 상점에 있으며 사용자가 로그인하면 업데이트됩니다.
완벽하게 작동하지만 페이지를 새로 고칠 때 저장소가 재설정되고 사용자가 아닌 경우 문제가 있습니다. 다시 상태로 로그인했습니다.
Redux 저장소는 메모리 저장소이므로 refesh 페이지에서 모든 데이터가 손실되므로이 문제가 발생합니다.
새로 고침 할 때마다 서버 세션을 확인해 볼 수는 있지만 너무 많은 요청 일 수 있으므로 좋지 않은 것처럼 보입니다.
localStorage에 상태 데이터를 저장하는 것이 효과적 일 수도 있지만,이 경우 세션이 만료되었거나 아무것도 존재하지 않으므로 모든 AJAX 호출이 거부 된 요청을 확인해야하며 나쁜 아이디어로 보입니다.
이 문제를보다 명확하게 해결할 수있는 방법이 있습니까? 내 웹 사이트는 많은 사람들을 사용할 것이므로 가능한 한 XHR 전화를 줄이려고합니다.
모든 조언은 매우 감사하겠습니다.
예제에서 IsAuthenticated는 ComposedComponent입니까? – klode
'RequiredAuth'는 합성 된 구성 요소이고'IsAuthenticated'는 'state.authenticated'가 참이어야하는 적절하게 이름 지정된 구성 요소의 수입니다. 답변을 업데이트했습니다. – alexi2
감사합니다. 새 편집이 더 명확합니다. – klode