From 47c7d6e4d540a498d4bd7e737a03e3db064e4db5 Mon Sep 17 00:00:00 2001 From: Ro0t-set Date: Fri, 24 May 2024 10:34:58 +0200 Subject: [PATCH] refactor(login-vue): refactor useUserStore to handle whoami response more efficiently and improve error handling --- frontend-service/src/main/vue/main.ts | 1 + frontend-service/src/main/vue/stores/user.ts | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/frontend-service/src/main/vue/main.ts b/frontend-service/src/main/vue/main.ts index 6ec9d1059..c4cf91a69 100644 --- a/frontend-service/src/main/vue/main.ts +++ b/frontend-service/src/main/vue/main.ts @@ -22,6 +22,7 @@ pinia.use(piniaPluginPersistedState); router.beforeEach((to, from, next) => { const userStore = useUserStore(); if (to.meta.requiresAuth && !userStore.isLoggedIn) { + console.log("Requires auth"); next("/login"); } else { next(); diff --git a/frontend-service/src/main/vue/stores/user.ts b/frontend-service/src/main/vue/stores/user.ts index b045e20c5..60f7b92b8 100644 --- a/frontend-service/src/main/vue/stores/user.ts +++ b/frontend-service/src/main/vue/stores/user.ts @@ -23,8 +23,8 @@ export const useUserStore = defineStore( async function refresh() { if (refreshing) return; refreshing = true; - console.log("Refreshing user"); await whoami(); + console.log("Refreshing user"); refreshing = false; } @@ -40,7 +40,6 @@ export const useUserStore = defineStore( if (response.statusCode === 200) { isLoggedIn.value = true; jwt.value = (response as LoginApi.Responses.Success).access_token; - await whoami(); } else { const typed = response as LoginApi.Errors.Type; throw new Error(typed.error); @@ -71,10 +70,15 @@ export const useUserStore = defineStore( // ==================== USER ==================== // async function whoami() { try { - const response = - (await userController.whoami()) as WhoamiApi.Responses.Success; - username.value = response.username; - email.value = response.email; + const response: WhoamiApi.Response = await userController.whoami(); + if (response.statusCode === 200) { + const typed = response as WhoamiApi.Responses.Success; + username.value = typed.username; + email.value = typed.email; + } else { + await logout(); + console.log("automatic logout"); + } } catch (e) { await logout(); console.log("automatic logout", e);