From 5e1dd0d2d7e7387694a80da5c252de75de407ac8 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Thu, 25 Jul 2024 17:36:59 +0700 Subject: [PATCH 1/5] keycloak.logout --- src/views/MainLayout.vue | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/views/MainLayout.vue b/src/views/MainLayout.vue index 0fe14917c..61ceaadad 100644 --- a/src/views/MainLayout.vue +++ b/src/views/MainLayout.vue @@ -416,11 +416,11 @@ const doLogout = () => { dialogConfirm( $q, async () => { + keycloak.logout(); await deleteCookie("BMAHRIS_KEYCLOAK_IDENTITY"); await deleteCookie("BMAHRIS_KEYCLOAK_REFRESH"); window.location.href = "/login"; }, - // keycloak.logout(), "ยืนยันการออกจากระบบ", "ต้องการออกจากระบบใช่หรือไม่?" ); @@ -527,8 +527,7 @@ function fetchPermissionsSys() { http .get(config.API.orgPermissionsSys) .then((res) => { - - storeMenu.fetchDataPermission(res.data.result) + storeMenu.fetchDataPermission(res.data.result); }) .catch((err) => { messageError($q, err); From f4592d28445a7ee3296b28129377e22f7a6f692c Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Fri, 26 Jul 2024 10:07:47 +0700 Subject: [PATCH 2/5] fixing check token --- src/main.ts | 3 --- src/router/index.ts | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main.ts b/src/main.ts index 24545e6ac..d42cd5ead 100644 --- a/src/main.ts +++ b/src/main.ts @@ -104,7 +104,6 @@ if (kcToken && kcRefreshToken) { token: kcToken, refreshToken: kcRefreshToken, }); - keycloak.authenticated = true; // .then((authenticated) => { // console.log("authenticated", authenticated); @@ -117,8 +116,6 @@ if (kcToken && kcRefreshToken) { // .catch((err) => { // console.error("Keycloak initialization failed:", err); // }); -} else { - keycloak.authenticated = false; } app.mount("#app"); diff --git a/src/router/index.ts b/src/router/index.ts index 79747b623..a3e912901 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -108,7 +108,7 @@ const router = createRouter({ // authen with keycloak client router.beforeEach((to, from, next) => { if (to.meta.Auth) { - if (keycloak.authenticated === false && to.meta.Auth) { + if (keycloak.authenticated === undefined && to.meta.Auth) { window.location.href = "/login"; } } else { From 3c4202a9281a7a77712b4c002d60e361b505803f Mon Sep 17 00:00:00 2001 From: waruneeauy Date: Fri, 26 Jul 2024 12:52:47 +0700 Subject: [PATCH 3/5] fixing auth --- src/main.ts | 24 +++--------- src/plugins/http.ts | 4 +- src/plugins/keycloak.ts | 83 ++++++++++++++++++++++++++++------------ src/router/index.ts | 13 +++++-- src/views/MainLayout.vue | 11 +----- src/views/auth.vue | 31 +++++---------- src/views/login.vue | 27 ++----------- 7 files changed, 91 insertions(+), 102 deletions(-) diff --git a/src/main.ts b/src/main.ts index d42cd5ead..df8024dbe 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,7 +3,7 @@ import App from "./App.vue"; import router from "./router"; import { Dialog, Notify, Quasar, Loading } from "quasar"; import "./quasar-user-options"; -import keycloak from "@/plugins/keycloak"; +import keycloak, { getToken } from "@/plugins/keycloak"; import qDraggableTable from "quasar-ui-q-draggable-table"; import "quasar-ui-q-draggable-table/dist/index.css"; @@ -83,28 +83,14 @@ app.component( app.config.globalProperties.$http = http; // authen with keycloak client -function getCookie(name: string) { - const nameEQ = name + "="; - const ca = document.cookie.split(";"); - for (let i = 0; i < ca.length; i++) { - let c = ca[i]; - while (c.charAt(0) == " ") c = c.substring(1, c.length); - if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); - } - return null; -} +const auth = await getToken(); -const kcToken = getCookie("BMAHRIS_KEYCLOAK_IDENTITY"); -const kcRefreshToken = getCookie("BMAHRIS_KEYCLOAK_REFRESH"); - -if (kcToken && kcRefreshToken) { +if (auth.token && auth.refresh_token) { keycloak.init({ - // onLoad: 'login-required', checkLoginIframe: false, - token: kcToken, - refreshToken: kcRefreshToken, + token: auth.token, + refreshToken: auth.refresh_token, }); - // .then((authenticated) => { // console.log("authenticated", authenticated); // if (!authenticated) { diff --git a/src/plugins/http.ts b/src/plugins/http.ts index 8aebceb21..e278860dd 100644 --- a/src/plugins/http.ts +++ b/src/plugins/http.ts @@ -1,5 +1,5 @@ import Axios, { type AxiosRequestConfig, type AxiosResponse } from "axios"; -import keycloak from "./keycloak"; +import keycloak, { kcLogout } from "./keycloak"; const http = Axios.create({ timeout: 1000000000, // เพิ่มค่า timeout @@ -33,7 +33,7 @@ http.interceptors.response.use( // eslint-disable-next-line no-prototype-builtins if (error.hasOwnProperty("response")) { if (error.response.status === 401 || error.response.status === 403) { - window.location.href = "/login"; + kcLogout(); // Store.commit("SET_ERROR_MESSAGE", error.response.data.message); // Store.commit("REMOVE_ACCESS_TOKEN") diff --git a/src/plugins/keycloak.ts b/src/plugins/keycloak.ts index 8c74003c3..19e0f9aff 100644 --- a/src/plugins/keycloak.ts +++ b/src/plugins/keycloak.ts @@ -1,30 +1,8 @@ -// /** -// * front connect to keycloak -// */ -// import Keycloak from "keycloak-js"; -// // import config from "../app.config"; -// // import http from "../shared/http"; -// // import router from "../router"; - -// const initOptions = { -// realm: import.meta.env.VITE_REALM_KEYCLOAK, -// clientId: import.meta.env.VITE_CLIENTID_KEYCLOAK, -// url: import.meta.env.VITE_URL_KEYCLOAK, -// // realm: "bma-ehr", -// // clientId: "bma-ehr-vue3", -// // url: "https://id.frappet.synology.me/", -// }; //option keycloak ที่จะ connect - -// const keycloak = Keycloak(initOptions); - -// keycloak.onAuthSuccess = () => {}; //เพิ่มlogin สำเร็จจะมาทำฟังก์ชันนี้ - -// await keycloak.init({ onLoad: "check-sso", checkLoginIframe: false }); //ทำการ connect keycloak -// export default keycloak; - // authen with keycloak client import Keycloak from "keycloak-js"; +const ACCESS_TOKEN = "BMAHRIS_KEYCLOAK_IDENTITY"; +const REFRESH_TOKEN = "BMAHRIS_KEYCLOAK_REFRESH"; const keycloakConfig = { url: "https://id.frappet.synology.me", realm: "bma-ehr", @@ -33,5 +11,60 @@ const keycloakConfig = { }; const keycloak = new Keycloak(keycloakConfig); + +async function kcAuthen(access_token: string, refresh_token: string) { + await setCookie(ACCESS_TOKEN, access_token, 1); + await setCookie(REFRESH_TOKEN, refresh_token, 1); + window.location.href = "/"; +} + +async function kcLogout() { + await deleteCookie(ACCESS_TOKEN); + await deleteCookie(REFRESH_TOKEN); + if (keycloak.authenticated !== undefined) { + keycloak.logout(); + } + window.location.href = "/login"; +} + +async function getToken() { + return { + token: getCookie(ACCESS_TOKEN), + refresh_token: getCookie(REFRESH_TOKEN), + }; +} + +function setCookie(name: string, value: any, days: number) { + let expires = ""; + if (days) { + const date = new Date(); + date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); + expires = "; expires=" + date.toUTCString(); + } + document.cookie = name + "=" + (value || "") + expires + "; path=/"; +} + +function getCookie(name: string) { + const nameEQ = name + "="; + const ca = document.cookie.split(";"); + for (let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) == " ") c = c.substring(1, c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); + } + return null; +} + +function deleteCookie(name: string) { + document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; +} + export default keycloak; -export { keycloakConfig }; +export { + keycloakConfig, + getToken, + kcAuthen, + kcLogout, + ACCESS_TOKEN, + REFRESH_TOKEN, +}; diff --git a/src/router/index.ts b/src/router/index.ts index a3e912901..a3091600f 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -28,7 +28,7 @@ import ModuleSupport from "@/modules/00_support/router"; import ModuleActing from "@/modules/17_acting/router"; // TODO: ใช้หรือไม่? -import keycloak from "@/plugins/keycloak"; +import keycloak, { kcLogout } from "@/plugins/keycloak"; const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), @@ -91,6 +91,11 @@ const router = createRouter({ Key: [7], }, }, + { + path: "/auth", + name: "auth", + component: () => import("@/views/auth.vue"), + }, ], scrollBehavior(to, from, savedPosition) { @@ -108,8 +113,10 @@ const router = createRouter({ // authen with keycloak client router.beforeEach((to, from, next) => { if (to.meta.Auth) { - if (keycloak.authenticated === undefined && to.meta.Auth) { - window.location.href = "/login"; + if (keycloak.authenticated === undefined) { + kcLogout(); + } else { + next(); } } else { next(); diff --git a/src/views/MainLayout.vue b/src/views/MainLayout.vue index 61ceaadad..548d8be97 100644 --- a/src/views/MainLayout.vue +++ b/src/views/MainLayout.vue @@ -1,6 +1,6 @@