fix(frontend): Login state blijft behouden voor andere tabs binnen dezelfde browser.
This commit is contained in:
		
							parent
							
								
									37c9e622e6
								
							
						
					
					
						commit
						2578555ace
					
				
					 4 changed files with 17 additions and 4 deletions
				
			
		|  | @ -3,6 +3,9 @@ | ||||||
|     import MenuBar from "@/components/MenuBar.vue"; |     import MenuBar from "@/components/MenuBar.vue"; | ||||||
|     import { useRoute } from "vue-router"; |     import { useRoute } from "vue-router"; | ||||||
|     import { computed } from "vue"; |     import { computed } from "vue"; | ||||||
|  |     import authService from "@/services/auth/auth-service.ts"; | ||||||
|  | 
 | ||||||
|  |     void authService.loadUser(); | ||||||
| 
 | 
 | ||||||
|     const route = useRoute(); |     const route = useRoute(); | ||||||
|     interface RouteMeta { |     interface RouteMeta { | ||||||
|  |  | ||||||
|  | @ -12,11 +12,9 @@ import App from "./App.vue"; | ||||||
| import router from "./router"; | import router from "./router"; | ||||||
| import { aliases, mdi } from "vuetify/iconsets/mdi"; | import { aliases, mdi } from "vuetify/iconsets/mdi"; | ||||||
| import { VueQueryPlugin, QueryClient } from "@tanstack/vue-query"; | import { VueQueryPlugin, QueryClient } from "@tanstack/vue-query"; | ||||||
| import authService from "./services/auth/auth-service.ts"; |  | ||||||
| 
 | 
 | ||||||
| const app = createApp(App); | const app = createApp(App); | ||||||
| 
 | 
 | ||||||
| await authService.loadUser(); |  | ||||||
| app.use(router); | app.use(router); | ||||||
| 
 | 
 | ||||||
| const link = document.createElement("link"); | const link = document.createElement("link"); | ||||||
|  |  | ||||||
|  | @ -138,7 +138,7 @@ const router = createRouter({ | ||||||
| router.beforeEach(async (to, _from, next) => { | router.beforeEach(async (to, _from, next) => { | ||||||
|     // Verify if user is logged in before accessing certain routes
 |     // Verify if user is logged in before accessing certain routes
 | ||||||
|     if (to.meta.requiresAuth) { |     if (to.meta.requiresAuth) { | ||||||
|         if (!authService.isLoggedIn.value) { |         if (!authService.isLoggedIn.value && !await authService.loadUser()) { | ||||||
|             next("/login"); |             next("/login"); | ||||||
|         } else { |         } else { | ||||||
|             next(); |             next(); | ||||||
|  |  | ||||||
|  | @ -37,7 +37,19 @@ async function loadUser(): Promise<User | null> { | ||||||
|     if (!activeRole) { |     if (!activeRole) { | ||||||
|         return null; |         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); |     setUserAuthInfo(user); | ||||||
|     authState.activeRole = activeRole ?? null; |     authState.activeRole = activeRole ?? null; | ||||||
|     return user; |     return user; | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 Gerald Schmittinger
						Gerald Schmittinger