From ec8234962dae40ad011e678b2ad6e5c33f997ce4 Mon Sep 17 00:00:00 2001 From: "robinwilliam.hundt" <robinwilliam.hundt@stud.uni-goettingen.de> Date: Sat, 16 Dec 2017 23:46:04 +0100 Subject: [PATCH] token/username etc. is saved in sessionstorage If the user now accidentally presses reload, the relevant session state (token, etc. ) will be retrieved from the session storage. --- frontend/src/components/Login.vue | 2 +- frontend/src/router/index.js | 2 ++ frontend/src/store/api.js | 3 ++- frontend/src/store/store.js | 21 +++++++++++++-------- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/Login.vue b/frontend/src/components/Login.vue index 82381bde..3d5f2336 100644 --- a/frontend/src/components/Login.vue +++ b/frontend/src/components/Login.vue @@ -63,10 +63,10 @@ this.loading = true this.getJWTToken(this.credentials).then(() => { this.loading = false - this.$router.push('/student/') this.getExamModule() this.getUserRole() this.getJWTTimeDelta() + this.$router.push('/student/') }).catch(() => { this.loading = false }) } } diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index 2b6e0b9a..849fbf66 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -63,6 +63,8 @@ router.beforeEach((to, from, next) => { } else { const now = new Date() if (now - store.state.logInTime > store.state.jwtTimeDelta * 1000) { + console.log(now) + console.log(store.state.logInTime) store.dispatch('logout').then(() => { store.commit('API_FAIL', 'You\'ve been logged out due to inactivity') next('/') diff --git a/frontend/src/store/api.js b/frontend/src/store/api.js index 2be0ed42..c1e52364 100644 --- a/frontend/src/store/api.js +++ b/frontend/src/store/api.js @@ -1,7 +1,8 @@ import axios from 'axios' let ax = axios.create({ - baseURL: 'http://localhost:8000/' + baseURL: 'http://localhost:8000/', + headers: {'Authorization': 'JWT ' + sessionStorage.getItem('jwtToken')} }) export default ax diff --git a/frontend/src/store/store.js b/frontend/src/store/store.js index 21490864..7d99d56b 100644 --- a/frontend/src/store/store.js +++ b/frontend/src/store/store.js @@ -14,12 +14,12 @@ const store = new Vuex.Store({ studentPage }, state: { - token: '', - loggedIn: false, - logInTime: {}, - username: '', - jwtTimeDelta: 0, - userRole: '', + token: sessionStorage.getItem('jwtToken'), + loggedIn: !!sessionStorage.getItem('jwtToken'), + logInTime: sessionStorage.getItem('logInTime'), + username: sessionStorage.getItem('username'), + jwtTimeDelta: sessionStorage.getItem('jwtTimeDelta'), + userRole: sessionStorage.getItem('userRole'), error: '', examInstance: '' }, @@ -34,21 +34,26 @@ const store = new Vuex.Store({ }, 'SET_JWT_TOKEN': function (state, token) { state.token = token - state.logInTime = new Date() - ax.defaults.headers.common['Authorization'] = 'JWT ' + token + state.logInTime = Date.now() + ax.defaults.headers['Authorization'] = 'JWT ' + token + sessionStorage.setItem('jwtToken', token) + sessionStorage.setItem('logInTime', state.logInTime) }, 'SET_JWT_TIME_DELTA': function (state, timeDelta) { state.jwtTimeDelta = timeDelta + sessionStorage.setItem('jwtTimeDelta', timeDelta) }, 'LOGIN': function (state, username) { state.loggedIn = true state.username = username + sessionStorage.setItem('username', username) }, 'LOGOUT': function (state) { state.loggedIn = false }, 'SET_USER_ROLE': function (state, userRole) { state.userRole = userRole + sessionStorage.setItem('userRole', userRole) }, 'SET_EXAM_INSTANCE': function (state, examInstance) { state.examInstance = examInstance -- GitLab