From 76b2859d8824f35f0fbd743379a512dd8df30760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Delattre?= Date: Sat, 20 May 2017 00:33:44 +0200 Subject: [PATCH] Improve the login function If a token is in the localStorage of the browser we now assume that the user is already logged in. If that's no the case, he will be redirected to the login page. --- src/public/js/actions/actionCreators.js | 6 ---- src/public/js/app.js | 40 +++++++++++++++---------- src/public/js/reducers/users.js | 8 ++--- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/public/js/actions/actionCreators.js b/src/public/js/actions/actionCreators.js index dc51d9b..962276e 100644 --- a/src/public/js/actions/actionCreators.js +++ b/src/public/js/actions/actionCreators.js @@ -38,12 +38,6 @@ export function userLogout() { } } -export function isUserLoggedIn() { - return { - type: 'IS_USER_LOGGED_IN', - } -} - export function loginUser(username, password) { return request( 'USER_LOGIN', diff --git a/src/public/js/app.js b/src/public/js/app.js index 2583361..3c2dac6 100644 --- a/src/public/js/app.js +++ b/src/public/js/app.js @@ -44,21 +44,16 @@ import UserLoginForm from './components/users/login' import UserEdit from './components/users/edit' import UserSignUp from './components/users/signup' -class Main extends React.Component { - componentWillMount() { - this.props.isUserLoggedIn(); - } - render() { - return ( -
- - -
- {React.cloneElement(this.props.children, this.props)} -
+function Main(props) { + return ( +
+ + +
+ {React.cloneElement(props.children, props)}
- ); - } +
+ ); } function mapStateToProps(state) { @@ -79,8 +74,21 @@ const App = connect(mapStateToProps, mapDispatchToProps)(Main); const loginCheck = function(nextState, replace, next, f) { const state = store.getState(); const isLogged = state.userStore.isLogged; - if (!isLogged) { - replace('/users/login'); + let token = localStorage.getItem('token'); + + // Let's check if the user has a token, if he does let's assume he's logged + // in. If that's not the case he will be logged out on the fisrt query + if (token !== "") { + store.dispatch({ + type: 'USER_SET_TOKEN', + payload: { + token: token, + }, + }); + } + + if (!isLogged && token === "") { + replace('/users/login'); } else { f(); } diff --git a/src/public/js/reducers/users.js b/src/public/js/reducers/users.js index f909267..894982e 100644 --- a/src/public/js/reducers/users.js +++ b/src/public/js/reducers/users.js @@ -20,12 +20,8 @@ export default function userStore(state = defaultState, action) { return logoutUser(state) } return updateFromToken(state, action.payload.data.token) - case 'IS_USER_LOGGED_IN': - let localToken = localStorage.getItem('token'); - if (!localToken || localToken === "") { - return state; - } - return updateFromToken(state, localToken) + case 'USER_SET_TOKEN': + return updateFromToken(state, action.payload.token) case 'USER_LOGOUT': return logoutUser(state) case 'GET_USER_FULFILLED':