Stabilize session handling

This commit is contained in:
Björn Fromme
2018-11-27 15:12:43 +01:00
parent da83529b71
commit 3d41d172fa
8 changed files with 47 additions and 40 deletions
@@ -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();
@@ -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;
}
}
});
@@ -16,7 +16,7 @@
<router-link :to="{ name: 'newsletter' }" tag="li" active-class="active" :class="{ disabled: loading }"><a>Newsletter</a></router-link>
<router-link :to="{ name: 'profile' }" tag="li" active-class="active" :class="{ disabled: loading }"><a>Mein Profil</a></router-link>
<router-link :to="{ name: 'events' }" tag="li" active-class="active" :class="{ disabled: loading }"><a>Reise-Historie</a></router-link>
<router-link :to="{ name: 'teamer' }" tag="li" active-class="active" :class="{ disabled: loading }" v-if="isTeamer"><a>Teamer</a></router-link>
<router-link :to="{ name: 'teamer' }" tag="li" active-class="active" :class="{ disabled: loading }" v-if="$store.getters.isTeamer"><a>Teamer</a></router-link>
</ul>
<ul class="nav navbar-nav navbar-right">
<li :class="{ disabled: loading }"><a href="#" @click.prevent="logout()">Logout</a></li>
@@ -62,9 +62,6 @@
isLoggedIn () {
return this.$store.state.loggedIn;
},
isTeamer () {
return this.$store.state.isTeamer;
},
loaderUrl () {
return this.$store.state.config.loaderUrl;
},
@@ -5,12 +5,12 @@ export default {
namespaced: true,
state: {},
actions: {
load ({ commit }) {
load ({ commit, rootState }) {
commit('loadingBegin', null, { root: true });
const client = axios.create({
headers: {
'X-Auth-Token': sessionStorage.getItem('token')
'X-Auth-Token': rootState.authToken
}
});
@@ -29,12 +29,12 @@ export default {
throw error;
});
},
save ({ commit }, data) {
save ({ commit, rootState }, data) {
commit('loadingBegin', null, { root: true });
const client = axios.create({
headers: {
'X-Auth-Token': sessionStorage.getItem('token')
'X-Auth-Token': rootState.authToken
}
});
@@ -5,12 +5,12 @@ export default {
namespaced: true,
state: {},
actions: {
load ({ commit }) {
load ({ commit, rootState }) {
commit('loadingBegin', null, { root: true });
const client = axios.create({
headers: {
'X-Auth-Token': sessionStorage.getItem('token')
'X-Auth-Token': rootState.authToken
}
});
@@ -29,12 +29,12 @@ export default {
throw error;
});
},
save ({ commit }, data) {
save ({ commit, rootState }, data) {
commit('loadingBegin', null, { root: true });
const client = axios.create({
headers: {
'X-Auth-Token': sessionStorage.getItem('token')
'X-Auth-Token': rootState.authToken
}
});
@@ -5,12 +5,12 @@ export default {
namespaced: true,
state: {},
actions: {
load ({ commit }) {
load ({ commit, rootState }) {
commit('loadingBegin', null, { root: true });
const client = axios.create({
headers: {
'X-Auth-Token': sessionStorage.getItem('token')
'X-Auth-Token': rootState.authToken
}
});
@@ -5,12 +5,12 @@ export default {
namespaced: true,
state: {},
actions: {
registration ({ commit }, data) {
registration ({ commit, rootState }, data) {
commit('loadingBegin', null, { root: true });
const client = axios.create({
headers: {
'X-Auth-Token': sessionStorage.getItem('token')
'X-Auth-Token': rootState.authToken
}
});
@@ -5,16 +5,16 @@ export default {
namespaced: true,
state: {},
actions: {
load ({ commit }) {
load ({ commit, rootState }) {
commit('loadingBegin', null, { root: true });
const client = axios.create({
headers: {
'X-Auth-Token': sessionStorage.getItem('token')
'X-Auth-Token': rootState.authToken
}
});
return client.get('/api/teamers/' + sessionStorage.getItem('teamerId'))
return client.get('/api/teamers/' + rootState.teamerId)
.then((response) => {
commit('loadingFinish', null, { root: true });
return response.data;
@@ -29,16 +29,16 @@ export default {
throw error;
});
},
save ({ commit }, data) {
save ({ commit, rootState }, data) {
commit('loadingBegin', null, { root: true });
const client = axios.create({
headers: {
'X-Auth-Token': sessionStorage.getItem('token')
'X-Auth-Token': rootState.authToken
}
});
return client.put('/api/teamers/' + sessionStorage.getItem('teamerId'), data)
return client.put('/api/teamers/' + rootState.teamerId, data)
.then(() => {
commit('loadingFinish', null, { root: true });
commit('alert', {