0
1
Fork 0

Renew token logic

This commit is contained in:
William Buezas 2024-10-02 16:39:09 -03:00
parent 261fddb1cf
commit 0246e39f0f
1 changed files with 32 additions and 31 deletions

View File

@ -29,21 +29,28 @@ export const useUserStore = defineStore('user', {
}, },
getters: { getters: {
loggedIn: state => state.token != null, loggedIn: state => !!state.token,
userLocaleOption: state => userLocaleOption: state =>
state.localeOptions?.find(l => l.value === state?.user?.lang) state.localeOptions?.find(l => l.value === state?.user?.lang),
storage: state => (state.keepLogin ? localStorage : sessionStorage)
}, },
actions: { actions: {
async init() { async init() {
this.isGuest = localStorage.getItem('hederaGuest') || false; this.isGuest = localStorage.getItem('hederaGuest') || false;
await this.getToken();
if (!this.loggedIn) {
const autoLoginStatus = await this.tryAutoLogin(); const autoLoginStatus = await this.tryAutoLogin();
if (!autoLoginStatus) { if (!autoLoginStatus) {
this.router.push({ name: 'login' }); this.router.push({ name: 'login' });
} }
return;
}
await this.fetchTokenConfig();
await this.fetchUser(); await this.fetchUser();
await this.supplantInit(); await this.supplantInit();
this.updateSiteLocale(); this.updateSiteLocale();
this.startInterval();
}, },
getToken() { getToken() {
@ -55,8 +62,7 @@ export const useUserStore = defineStore('user', {
}, },
setToken(token) { setToken(token) {
const storage = this.keepLogin ? localStorage : sessionStorage; this.storage.setItem('vnToken', token);
storage.setItem('vnToken', token);
this.token = token; this.token = token;
}, },
@ -79,7 +85,6 @@ export const useUserStore = defineStore('user', {
tokenMultimedia: 'Accounts/logout', tokenMultimedia: 'Accounts/logout',
token: 'VnUsers/logout' token: 'VnUsers/logout'
}; };
const storage = this.keepLogin ? localStorage : sessionStorage;
let destroyTokenPromises = []; let destroyTokenPromises = [];
try { try {
if (destroyTokens) { if (destroyTokens) {
@ -88,7 +93,8 @@ export const useUserStore = defineStore('user', {
); );
if (isValidToken) if (isValidToken)
destroyTokenPromises = Object.entries(tokens).map( destroyTokenPromises = Object.entries(tokens).map(
([key, url]) => this.destroyToken(url, storage, key) ([key, url]) =>
this.destroyToken(url, this.storage, key)
); );
} }
} finally { } finally {
@ -100,12 +106,15 @@ export const useUserStore = defineStore('user', {
} }
}, },
isLoggedIn() {
const token = this.getToken();
return !!token;
},
setSession(data) { setSession(data) {
const storage = this.keepLogin ? localStorage : sessionStorage; this.storage.setItem('created', data.created);
storage.setItem('vnToken', data.token); this.storage.setItem('ttl', data.ttl);
storage.setItem('created', data.created); localStorage.setItem('keepLogin', this.keepLogin);
storage.setItem('ttl', data.ttl);
sessionStorage.setItem('keepLogin', this.keepLogin);
}, },
async login(user, password, remember) { async login(user, password, remember) {
@ -135,15 +144,11 @@ export const useUserStore = defineStore('user', {
}, },
async logout() { async logout() {
if (this.token != null) {
try { try {
await api.post('Accounts/logout'); await api.post('Accounts/logout');
} catch (e) {} } catch (e) {}
localStorage.removeItem('vnToken'); this.destroy();
sessionStorage.removeItem('vnToken');
}
this.$reset(); this.$reset();
localStorage.removeItem('hederaGuest');
useAppStore().onLogout(); useAppStore().onLogout();
}, },
@ -154,8 +159,7 @@ export const useUserStore = defineStore('user', {
}); });
if (!data) return; if (!data) return;
this.tokenConfig = data; this.tokenConfig = data;
sessionStorage.setItem('tokenConfig', data); this.storage.setItem('renewPeriod', data.renewPeriod);
sessionStorage.setItem('renewPeriod', data.renewPeriod);
return data; return data;
} catch (error) { } catch (error) {
notify('errors.tokenConfig', 'negative'); notify('errors.tokenConfig', 'negative');
@ -173,17 +177,14 @@ export const useUserStore = defineStore('user', {
}, },
async checkValidity() { async checkValidity() {
const tokenConfig = const created = +this.storage.getItem('created');
this.tokenConfig ?? sessionStorage.getItem('tokenConfig'); const ttl = +this.storage.getItem('ttl');
const storage = this.keepLogin ? localStorage : sessionStorage;
const created = +storage.getItem('created');
const ttl = +storage.getItem('ttl');
if (this.isCheckingToken || !created) return; if (this.isCheckingToken || !created) return;
this.isCheckingToken = true; this.isCheckingToken = true;
const renewPeriodInSeconds = const renewPeriodInSeconds =
Math.min(ttl, tokenConfig.value.renewPeriod) * 1000; Math.min(ttl, this.tokenConfig?.renewPeriod) * 1000;
const maxDate = created + renewPeriodInSeconds; const maxDate = created + renewPeriodInSeconds;
const now = new Date().getTime(); const now = new Date().getTime();
@ -201,7 +202,7 @@ export const useUserStore = defineStore('user', {
startInterval() { startInterval() {
this.stopRenewer(); this.stopRenewer();
const renewPeriod = +sessionStorage.getItem('renewPeriod'); const renewPeriod = +this.storage.getItem('renewPeriod');
if (!renewPeriod) return; if (!renewPeriod) return;
this.intervalId = setInterval( this.intervalId = setInterval(
() => this.checkValidity(), () => this.checkValidity(),