hrms-edm/Services/client/src/services/KeyCloakService.ts

56 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-11-28 09:22:44 +07:00
import Keycloak from 'keycloak-js'
2023-11-23 08:47:44 +07:00
2024-12-20 18:38:14 +07:00
const keycloakConfig = {
realm: import.meta.env.KC_REALMS,
'auth-server-url': import.meta.env.KC_URL,
'ssl-required': 'external',
resource: 'edm',
'public-client': true,
'confidential-port': 0,
}
const keycloak = new Keycloak(keycloakConfig)
2023-12-11 10:10:39 +07:00
let init = false
2023-11-23 08:47:44 +07:00
2023-12-11 10:10:39 +07:00
export async function login(cb?: (...args: any[]) => void) {
const auth = !init
? await keycloak
.init({
onLoad: 'login-required',
responseMode: 'query',
checkLoginIframe: false,
})
.catch((e) => console.dir(e))
: await keycloak.login().catch((e) => console.dir(e))
if (auth) init = true
if (auth && cb) cb()
}
2023-11-23 08:47:44 +07:00
export async function logout() {
await keycloak.logout()
}
2023-11-23 08:47:44 +07:00
export async function getToken() {
await keycloak.updateToken(60).catch(() => login())
return keycloak.token
2023-11-28 09:22:44 +07:00
}
2023-11-23 08:47:44 +07:00
export function getUsername(): string {
return keycloak.tokenParsed?.preferred_username
}
2023-11-23 08:47:44 +07:00
export function getRole(): string[] {
const decoded = keycloak.tokenParsed
2023-11-23 08:47:44 +07:00
if (decoded && decoded.resource_access && decoded.azp) {
return decoded.resource_access[decoded.azp].roles
}
2023-11-23 08:47:44 +07:00
return []
2023-11-28 09:22:44 +07:00
}
2023-11-23 08:47:44 +07:00
export function isLoggedIn() {
return !!keycloak.token
2023-11-28 09:22:44 +07:00
}