@zitadel/vue
Version:
Wraps vue-oidc-client to provide a simple interface for ZITADEL
37 lines (36 loc) • 1.64 kB
JavaScript
import { createOidcAuth, SignInType, LogLevel } from 'vue-oidc-client/vue3';
export function createZITADELAuth(zitadelConfig, authName = "zitadel", defaultSignInType = SignInType.Window, appUrl = `${window.location.origin}/`, oidcConfig, logger = console, logLevel = LogLevel.Error) {
const cfg = {
response_type: 'code',
scope: 'openid profile email offline_access' +
(zitadelConfig.project_resource_id ?
` urn:zitadel:iam:org:project:id:${zitadelConfig.project_resource_id}:aud` +
' urn:zitadel:iam:org:projects:roles'
: '')
+ (zitadelConfig.org_id ? ` urn:zitadel:iam:org:id:${zitadelConfig.org_id}` : ''),
authority: zitadelConfig.issuer,
client_id: zitadelConfig.client_id,
loadUserInfo: true,
automaticSilentRenew: true,
...oidcConfig, // everything can be overridden!
};
const oidcAuth = createOidcAuth(authName, defaultSignInType, appUrl, cfg, logger, logLevel);
return {
oidcAuth,
hasRole: (role) => {
if (!zitadelConfig.project_resource_id) {
throw new Error('projectResourceID is required for hasRole');
}
const roles = oidcAuth.userProfile[`urn:zitadel:iam:org:project:${zitadelConfig.project_resource_id}:roles`];
if (!roles) {
return false;
}
if (Array.isArray(roles)) {
return roles.find(r => r[role]);
}
else {
return Object.keys(roles).some(key => key === role);
}
}
};
}