diff --git a/frontend/src/components/Login.vue b/frontend/src/components/Login.vue index 82381bde13586a956f8e95cc83058070bc0c0321..3d5f2336a0788e1554d7bf76c28ec7c1a727f335 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 2b6e0b9a6d9dbeb5cbba032d312640428c9491ce..849fbf66c4d47a38992f6ea97e5dcf25776d7966 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 2be0ed429deada34d26903031a564dbf31afde6a..c1e523645706a4f2c07c2282906e138186c67d4f 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 214908640b8247ea79825a1656806e5b5318d392..7d99d56b21ba722b6ed7343127b593cc7d88c29a 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