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