From 1530d538caf6b43d05e1f4ae59e07564ec0c2397 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Fri, 20 Jun 2025 17:35:32 +0700 Subject: [PATCH] fix ==> redirectToLink --- src/plugins/auth.ts | 44 +++++++++++++++++++++++++++++++--------- src/plugins/http.ts | 2 ++ src/router/index.ts | 3 ++- src/views/MainLayout.vue | 9 ++++++-- src/views/auth.vue | 6 +++++- 5 files changed, 50 insertions(+), 14 deletions(-) diff --git a/src/plugins/auth.ts b/src/plugins/auth.ts index 0c116a5..71bd05c 100644 --- a/src/plugins/auth.ts +++ b/src/plugins/auth.ts @@ -1,6 +1,7 @@ const ACCESS_TOKEN = "BMAHRISUSER_KEYCLOAK_IDENTITY"; const key_C_Config = { url_Logout: import.meta.env.VITE_URL_SSO, + landing_PageUrl: import.meta.env.VITE_URL_LANDING, }; interface AuthResponse { access_token: string; @@ -10,22 +11,32 @@ interface AuthResponse { const authenticated = async () => ((await getToken()) ? true : false); -async function setAuthen(r: AuthResponse, val: string) { - await setCookie(ACCESS_TOKEN, r.access_token, r.expires_in); - setCookie("SSO", val, r.expires_in); - window.location.href = "/"; +async function setAuthen(r: AuthResponse, val: string, url?: string) { + if (r && r.access_token) { + await setCookie(ACCESS_TOKEN, r.access_token, r.expires_in); + setCookie("SSO", val, r.expires_in); + window.location.href = url ? encodeURI(url) : "/"; + } } -async function logout() { - await deleteCookie(ACCESS_TOKEN); - window.location.href = key_C_Config.url_Logout; +async function logout(force: boolean = false) { + if (!force) { + await deleteCookie(ACCESS_TOKEN); + window.location.href = key_C_Config.url_Logout; + } else { + const currentUrl = window.location.href; + const loginUrl = `${ + key_C_Config.landing_PageUrl + }?system=user&redirectUrl=${encodeURIComponent(currentUrl)}`; + window.location.href = loginUrl; + } } async function getToken() { return getCookie(ACCESS_TOKEN); } // 2024-08-29T02:55:13.000Z -function setCookie(name: string, value: any, time: number) { +async function setCookie(name: string, value: any, time: number) { let expires = ""; if (time) { const date = new Date(); @@ -47,7 +58,7 @@ function getCookie(name: string) { return null; } -function deleteCookie(name: string) { +async function deleteCookie(name: string) { document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; } @@ -71,4 +82,17 @@ async function tokenParsed() { return JSON.parse(jsonPayload); } -export { getToken, authenticated, logout, setAuthen, tokenParsed, getCookie }; +async function redirectToLandingPage() { + await deleteCookie(ACCESS_TOKEN); + window.location.href = key_C_Config.landing_PageUrl; +} + +export { + getToken, + authenticated, + logout, + setAuthen, + tokenParsed, + getCookie, + redirectToLandingPage, +}; diff --git a/src/plugins/http.ts b/src/plugins/http.ts index 22f18a1..f12682e 100644 --- a/src/plugins/http.ts +++ b/src/plugins/http.ts @@ -32,6 +32,8 @@ http.interceptors.response.use( if (typeof error !== undefined) { // eslint-disable-next-line no-prototype-builtins if (error.hasOwnProperty("response")) { + console.log("error.response.status", error.response.status); + if (error.response.status === 403) { window.location.href = "/error"; // Store.commit("SET_ERROR_MESSAGE", error.response.data.message); diff --git a/src/router/index.ts b/src/router/index.ts index 04b4901..351fbaf 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -95,7 +95,8 @@ router.beforeEach(async (to, from, next) => { if (to.meta.Auth) { const checkAuthen = await authenticated(); if (!checkAuthen && to.meta.Auth) { - logout(); + logout(true); + return; } } next(); diff --git a/src/views/MainLayout.vue b/src/views/MainLayout.vue index 56ae845..c99d63f 100644 --- a/src/views/MainLayout.vue +++ b/src/views/MainLayout.vue @@ -7,7 +7,12 @@ import { useQuasar } from "quasar"; import { useCounterMixin } from "@/stores/mixin"; import CustomComponent from "@/components/CustomDialog.vue"; import avatar from "@/assets/avatar_user.jpg"; -import { tokenParsed, logout, getCookie } from "@/plugins/auth"; +import { + tokenParsed, + logout, + getCookie, + redirectToLandingPage, +} from "@/plugins/auth"; import { useDataStore } from "@/stores/data"; @@ -502,7 +507,7 @@ function onViewDetailNoti(url: string) { diff --git a/src/views/auth.vue b/src/views/auth.vue index e68a009..3d2c6ab 100644 --- a/src/views/auth.vue +++ b/src/views/auth.vue @@ -12,7 +12,11 @@ onMounted(async () => { expires_in: route.query.expires ? route.query.expires : 36000, refresh_token: route.query.accessToken, }; - setAuthen(params, "y"); + setAuthen( + params, + "y", + route.query.redirectUrl ? (route.query.redirectUrl as string) : "/" + ); } });