50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
import { IS_USER_LOGGED_IN } from '../actions/actionCreators'
|
|
import jwtDecode from 'jwt-decode'
|
|
|
|
const defaultState = {
|
|
userLoading: false,
|
|
username: "",
|
|
isAdmin: false,
|
|
isLogged: false,
|
|
};
|
|
|
|
// This actions are generated from the promise middleware
|
|
|
|
export default function userStore(state = defaultState, action) {
|
|
switch (action.type) {
|
|
case 'USER_LOGIN_PENDING':
|
|
return Object.assign({}, state, {
|
|
userLoading: true,
|
|
})
|
|
case 'USER_LOGIN_FULFILLED':
|
|
if (action.payload.data.type === "error") {
|
|
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)
|
|
default:
|
|
return state;
|
|
}
|
|
}
|
|
|
|
function logoutUser(state) {
|
|
localStorage.removeItem('token');
|
|
return Object.assign({}, state, defaultState)
|
|
}
|
|
|
|
function updateFromToken(state, token) {
|
|
const decodedToken = jwtDecode(token);
|
|
localStorage.setItem('token', token);
|
|
return Object.assign({}, state, {
|
|
userLoading: false,
|
|
isLogged: true,
|
|
isAdmin: decodedToken.isAdmin,
|
|
username: decodedToken.username,
|
|
})
|
|
}
|