const namespaced = true; let timer const state = { jwt: null, userData: null, userRole: null, expirationDate: null, didAutoLogout: false, isLoggedIn: false, lastPath: null, expireTime: 3600000, }; const mutations = { SET_JWT(state, jwt) { state.jwt = jwt; }, SET_USER_DATA(state, userData) { state.userData = userData; }, SET_USER_ROLE(state, userRole) { state.userRole = userRole; }, LOG_OUT(state) { state.jwt = null; state.userData = null; state.userRole = null; }, SET_AUTO_LOGOUT(state){ state.didAutoLogout = true }, SET_LAST_PATH(state, payload){ state.lastPath = payload }, SET_EXPIRE_TIME(state, expireTime) { state.expireTime = expireTime } }; const getters = { jwt: (state) => state.jwt, userData: (state) => state.userData, userRole: (state) => state.userRole, didAutoLogout: (state) => state.didAutoLogout, getLastPath : (state) => state.lastPath, expireTime : (state) => state.expireTime }; const actions = { setJwt({ commit }, jwt) { localStorage.setItem('jwt', jwt); commit('SET_JWT', jwt); }, setUserData({ commit, dispatch, state }, userData) { localStorage.setItem('userData', userData) /* calulation of hours to millisec (hr*3600000) */ // const expiresIn = 60 * 1000 // const expiresIn = 20000 let expiresIn = 3600000 const expirationDate = new Date().getTime() + expiresIn localStorage.setItem('tokenExpiration', expirationDate) commit('SET_USER_DATA', userData); timer= setTimeout(function(){ dispatch('autoLogout') }, expiresIn ) }, setUserRole({ commit }, userRole) { localStorage.setItem('roleName', userRole); commit('SET_USER_ROLE', userRole); }, logOut({ commit }) { localStorage.removeItem('jwt'); localStorage.removeItem('userData'); localStorage.removeItem('roleName'); localStorage.removeItem('tokenExpiration') clearTimeout(timer) commit('LOG_OUT'); }, tryLogin(context) { const jwtToken = localStorage.getItem('jwt'); const userData = localStorage.getItem('userData'); const role = localStorage.getItem('roleName'); const tokenExpiration = localStorage.getItem('tokenExpiration') const expiresIn= tokenExpiration - new Date().getTime() if(expiresIn<0){ return } timer = setTimeout(function(){ context.dispatch('autoLogout') }, expiresIn ) context.commit('SET_JWT', jwtToken); context.commit('SET_USER_DATA', userData); context.commit('SET_USER_ROLE', role); }, autoLogout(context){ context.dispatch('logOut') context.commit('SET_AUTO_LOGOUT') }, setLastPath(context, path){ context.commit('SET_LAST_PATH', path) }, setExpireTime(context, expireTime) { context.commit('SET_EXPIRE_TIME', expireTime) } }; export default { namespaced, state, mutations, getters, actions, };