Mercurial > gemma
comparison client/src/stores/user.js @ 160:061209505028
feat: Login and logout with session restoration implemented
Login information stored in local storage for restoration after
browser restart. If a non expired session is found, it
is restored before entering the main area.
Username and logout are located in the lower sidebar.
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Wed, 04 Jul 2018 17:21:10 +0200 |
parents | 992e17912405 |
children | 9908260d1e6a |
comparison
equal
deleted
inserted
replaced
159:3d9341f6da4e | 160:061209505028 |
---|---|
1 import { HTTP } from "../lib/http"; | 1 import { HTTP } from "../lib/http"; |
2 | 2 |
3 const User = { | 3 const User = { |
4 namespaced: true, | 4 namespaced: true, |
5 state: { | 5 state: { |
6 user: "", | |
7 authenticated: false, | 6 authenticated: false, |
8 expires: null, | 7 expires: null, |
9 roles: [] | 8 roles: [], |
9 user: "" | |
10 }, | 10 }, |
11 getters: { | 11 getters: { |
12 authenticated: state => { | 12 authenticated: state => { |
13 return state.authenticated; | 13 return state.authenticated; |
14 }, | 14 }, |
15 userinfo: state => { | 15 userinfo: state => { |
16 return state.user; | 16 return state.user; |
17 }, | |
18 roles: state => { | |
19 return state.roles; | |
20 }, | |
21 expires: state => { | |
22 return state.expires; | |
17 } | 23 } |
18 }, | 24 }, |
19 mutations: { | 25 mutations: { |
20 auth_success: (state, data) => { | 26 auth_success: (state, data) => { |
21 state.authenticated = true; | |
22 const { token, user, expires, roles } = data; | 27 const { token, user, expires, roles } = data; |
23 state.user = user; | 28 localStorage.setItem("expires", expires); |
29 localStorage.setItem("roles", roles); | |
30 localStorage.setItem("token", token); | |
31 localStorage.setItem("user", user); | |
24 state.expires = expires; | 32 state.expires = expires; |
25 state.roles = roles; | 33 state.roles = roles; |
26 sessionStorage.setItem("token", token); | 34 state.user = user; |
35 state.authenticated = true; | |
27 }, | 36 }, |
28 auth_failure: state => { | 37 clear_auth: state => { |
29 state.authenticated = false; | 38 state.authenticated = false; |
30 sessionStorage.removeItem("token"); | 39 state.expires = null; |
40 state.roles = []; | |
41 state.user = ""; | |
42 localStorage.clear(); | |
43 }, | |
44 set_user: (state, name) => { | |
45 state.user = name; | |
46 }, | |
47 set_roles: (state, roles) => { | |
48 state.roles = roles; | |
49 }, | |
50 set_expires: (state, expires) => { | |
51 state.expires = expires; | |
52 }, | |
53 authenticate: state => { | |
54 state.authenticated = true; | |
31 } | 55 } |
32 }, | 56 }, |
33 actions: { | 57 actions: { |
34 login({ commit }, user) { | 58 login({ commit }, user) { |
35 return new Promise((resolve, reject) => { | 59 return new Promise((resolve, reject) => { |
37 .then(response => { | 61 .then(response => { |
38 commit("auth_success", response.data); | 62 commit("auth_success", response.data); |
39 resolve(response); | 63 resolve(response); |
40 }) | 64 }) |
41 .catch(error => { | 65 .catch(error => { |
42 commit("auth_failure"); | 66 commit("clear_auth"); |
43 reject(error); | 67 reject(error); |
44 }); | 68 }); |
45 }); | 69 }); |
46 } | 70 } |
47 } | 71 } |