Stabilize session handling
This commit is contained in:
@@ -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', {
|
||||
|
||||
Reference in New Issue
Block a user