From 3d41d172fa0eb4781c2b53f16ffd2ec79406248f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bjo=CC=88rn=20Fromme?= Date: Tue, 27 Nov 2018 15:12:43 +0100 Subject: [PATCH] Stabilize session handling --- .../Private/Assets/js/myep/_router.js | 2 +- .../Private/Assets/js/myep/_store.js | 44 ++++++++++++------- .../Private/Assets/js/myep/components/App.vue | 5 +-- .../Private/Assets/js/myep/stores/address.js | 8 ++-- .../Private/Assets/js/myep/stores/crmdata.js | 8 ++-- .../Private/Assets/js/myep/stores/events.js | 4 +- .../Assets/js/myep/stores/newsletter.js | 4 +- .../Private/Assets/js/myep/stores/teamer.js | 12 ++--- 8 files changed, 47 insertions(+), 40 deletions(-) diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js index 641ddecf..1236b3c8 100644 --- a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_router.js @@ -8,7 +8,7 @@ const guard = (to, from, next) => { if (store.state.loading) { next(false); } else if (store.state.loggedIn) { - if (to.meta.requiresTeamer && !store.state.isTeamer) { + if (to.meta.requiresTeamer && !store.getters.isTeamer) { next(false); } else { next(); diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_store.js b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_store.js index 40757480..8c6cffb4 100644 --- a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_store.js +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/_store.js @@ -26,8 +26,10 @@ export default new Vuex.Store({ state: { config: config, loading: false, + authToken: sessionStorage.getItem('token'), loggedIn: !!sessionStorage.getItem('token'), isTeamer: JSON.parse(sessionStorage.getItem('teamerId')) !== null, + teamerId: JSON.parse(sessionStorage.getItem('teamerId')), countries: [], abilities: [], timeFrames: [], @@ -38,22 +40,30 @@ export default new Vuex.Store({ } }, mutations: { - loginSuccess (state) { + loginSuccess (state, token) { state.loggedIn = true; + state.authToken = token; + sessionStorage.setItem('token', token); }, loginFailure (state) { state.loggedIn = false; }, logout (state) { state.loggedIn = false; - state.teamer = false; + state.isTeamer = false; + state.teamerId = null; + state.authToken = null; + sessionStorage.removeItem('token'); + sessionStorage.removeItem('teamerId'); }, alert (state, payload) { state.message.text = payload.message; state.message.class = payload.class; }, - isTeamer (state) { - state.teamer = true; + isTeamer (state, teamerId) { + state.isTeamer = true; + state.teamerId = teamerId; + sessionStorage.setItem('teamerId', teamerId); }, loadingBegin (state) { state.loading = true; @@ -88,12 +98,11 @@ export default new Vuex.Store({ method: 'post', withCredentials: true }).then((response) => { - sessionStorage.setItem('token', response.data.token); - sessionStorage.setItem('teamerId', response.data.teamer_id); - if (response.data.teamer_id) { - commit('isTeamer'); + let teamerId = parseInt(response.data.teamer_id); + if (teamerId > 0) { + commit('isTeamer', teamerId); } - commit('loginSuccess'); + commit('loginSuccess', response.data.token); commit('loadingFinish'); }).catch((error) => { commit('loginFailure'); @@ -105,15 +114,13 @@ export default new Vuex.Store({ throw error; }); }, - logout({ commit }) { + logout({ commit, state }) { return axios({ url: '/api/logout', headers: { - 'x-auth-token': sessionStorage.getItem('token') + 'x-auth-token': state.authToken } }).then(() => { - sessionStorage.removeItem('token'); - sessionStorage.removeItem('teamerId'); commit('logout'); }); }, @@ -157,11 +164,14 @@ export default new Vuex.Store({ } }, getters: { - authToken () { - return sessionStorage.getItem('token') + authToken: state => { + return state.authToken; }, - teamerId () { - return sessionStorage.getItem('teamerId') + isTeamer: state => { + return state.isTeamer; + }, + teamerId: state => { + return state.teamerId; } } }); diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/App.vue b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/App.vue index f6b7fa39..99ad182e 100644 --- a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/App.vue +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/myep/components/App.vue @@ -16,7 +16,7 @@ Newsletter Mein Profil Reise-Historie - Teamer + Teamer