From 2578555ace1204c8c6e2ea1b69055040f7b6c9f2 Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger Date: Tue, 22 Apr 2025 11:04:24 +0200 Subject: [PATCH] fix(frontend): Login state blijft behouden voor andere tabs binnen dezelfde browser. --- frontend/src/App.vue | 3 +++ frontend/src/main.ts | 2 -- frontend/src/router/index.ts | 2 +- frontend/src/services/auth/auth-service.ts | 14 +++++++++++++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index b1207448..dbb62e79 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -3,6 +3,9 @@ import MenuBar from "@/components/MenuBar.vue"; import { useRoute } from "vue-router"; import { computed } from "vue"; + import authService from "@/services/auth/auth-service.ts"; + + void authService.loadUser(); const route = useRoute(); interface RouteMeta { diff --git a/frontend/src/main.ts b/frontend/src/main.ts index e4bdde40..b5315634 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -12,11 +12,9 @@ import App from "./App.vue"; import router from "./router"; import { aliases, mdi } from "vuetify/iconsets/mdi"; import { VueQueryPlugin, QueryClient } from "@tanstack/vue-query"; -import authService from "./services/auth/auth-service.ts"; const app = createApp(App); -await authService.loadUser(); app.use(router); const link = document.createElement("link"); diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 1eeb8865..901d376f 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -138,7 +138,7 @@ const router = createRouter({ router.beforeEach(async (to, _from, next) => { // Verify if user is logged in before accessing certain routes if (to.meta.requiresAuth) { - if (!authService.isLoggedIn.value) { + if (!authService.isLoggedIn.value && !await authService.loadUser()) { next("/login"); } else { next(); diff --git a/frontend/src/services/auth/auth-service.ts b/frontend/src/services/auth/auth-service.ts index 9151e0a9..92b5002d 100644 --- a/frontend/src/services/auth/auth-service.ts +++ b/frontend/src/services/auth/auth-service.ts @@ -37,7 +37,19 @@ async function loadUser(): Promise { if (!activeRole) { return null; } - const user = await (await getUserManagers())[activeRole].getUser(); + + const userManager = (await getUserManagers())[activeRole]; + let user = await userManager.getUser(); // Load the user from the local storage. + if (!user) { // If the user is not in the local storage, he could still be authenticated in Keycloak. + try { + user = await userManager.signinSilent() + } catch (e: unknown) { + // When the user was previously logged in and then logged out, signinSilent throws an error. + // In that case, the user is not authenticated anymore, so we set him to null. + user = null; + } + } + setUserAuthInfo(user); authState.activeRole = activeRole ?? null; return user;