Cleaned up auth logic and fixed interval for token refreshing.
This commit is contained in:
parent
a001ef89e9
commit
4ec30b37f8
|
@ -1,8 +1,8 @@
|
||||||
import { api } from 'src/api/main/index';
|
import { api } from 'src/api/main/index';
|
||||||
import {AuthStoreType, useAuthStore} from 'stores/auth-store';
|
import {AuthStoreType} from 'stores/auth-store';
|
||||||
import Timeout = NodeJS.Timeout;
|
import Timeout = NodeJS.Timeout;
|
||||||
import { WeightUnit } from 'src/api/main/submission';
|
import { WeightUnit } from 'src/api/main/submission';
|
||||||
import {Page, PaginationOptions, toQueryParams} from "src/api/main/models";
|
import {Page, PaginationOptions, toQueryParams} from 'src/api/main/models';
|
||||||
|
|
||||||
export interface User {
|
export interface User {
|
||||||
id: string;
|
id: string;
|
||||||
|
@ -91,14 +91,14 @@ class AuthModule {
|
||||||
authStore.roles = roles;
|
authStore.roles = roles;
|
||||||
|
|
||||||
clearTimeout(this.tokenRefreshTimer);
|
clearTimeout(this.tokenRefreshTimer);
|
||||||
this.tokenRefreshTimer = setTimeout(
|
this.tokenRefreshTimer = setInterval(
|
||||||
() => this.refreshToken(authStore),
|
() => this.refreshToken(authStore),
|
||||||
AuthModule.TOKEN_REFRESH_INTERVAL_MS
|
AuthModule.TOKEN_REFRESH_INTERVAL_MS
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public logout(authStore: AuthStoreType) {
|
public logout(authStore: AuthStoreType) {
|
||||||
authStore.$reset();
|
authStore.logOut();
|
||||||
clearTimeout(this.tokenRefreshTimer);
|
clearTimeout(this.tokenRefreshTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,8 +118,17 @@ class AuthModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
public async refreshToken(authStore: AuthStoreType) {
|
public async refreshToken(authStore: AuthStoreType) {
|
||||||
|
try {
|
||||||
const response = await api.get('/auth/token', authStore.axiosConfig);
|
const response = await api.get('/auth/token', authStore.axiosConfig);
|
||||||
authStore.token = response.data.token;
|
authStore.token = response.data.token;
|
||||||
|
} catch (error: any) {
|
||||||
|
authStore.logOut();
|
||||||
|
if (error.response) {
|
||||||
|
console.warn('Failed to refresh token: ', error.response);
|
||||||
|
} else {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getMyUser(authStore: AuthStoreType): Promise<User> {
|
public async getMyUser(authStore: AuthStoreType): Promise<User> {
|
||||||
|
|
|
@ -43,6 +43,34 @@ export const useAuthStore = defineStore('authStore', {
|
||||||
},
|
},
|
||||||
isAdmin: state => state.roles.indexOf('admin') !== -1,
|
isAdmin: state => state.roles.indexOf('admin') !== -1,
|
||||||
},
|
},
|
||||||
|
actions: {
|
||||||
|
/**
|
||||||
|
* Logs a user into the application.
|
||||||
|
* @param user The user who was logged in.
|
||||||
|
* @param token The token that was obtained.
|
||||||
|
* @param roles The list of the user's roles.
|
||||||
|
*/
|
||||||
|
logIn(user: User, token: string, roles: string[]) {
|
||||||
|
this.user = user;
|
||||||
|
this.token = token;
|
||||||
|
this.roles = roles;
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Logs a user out of the application, resetting the auth state.
|
||||||
|
*/
|
||||||
|
logOut() {
|
||||||
|
this.user = null;
|
||||||
|
this.token = null;
|
||||||
|
this.roles = [];
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Updates the token that's stored for the currently authenticated user.
|
||||||
|
* @param token The new token.
|
||||||
|
*/
|
||||||
|
updateToken(token: string) {
|
||||||
|
this.token = token;
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export type AuthStoreType = ReturnType<typeof useAuthStore>;
|
export type AuthStoreType = ReturnType<typeof useAuthStore>;
|
||||||
|
|
Loading…
Reference in New Issue