使用 keycloak-angular 访问 keycloak 功能

问题描述

在我的 Angular 应用程序中,我以这种方式初始化加载 keycloak:

app.module.ts:

providers: [
    { 
      provide: APP_INITIALIZER,useFactory: initializer,deps: [ KeycloakService,AppService ],multi: true
    }
  ],

在 app-init.ts 中:

import { KeycloakService } from 'keycloak-angular';
import { AppService } from 'src/app/app.service';
import { environment } from '../environments/environment';
 
export function initializer(keycloak: KeycloakService,appService: AppService): () => Promise<any> {
    return (): Promise<any> => {
        return new Promise<void>(async (resolve,reject) => {
          try {
            await keycloak.init({
                config: {
                    url: environment.keycloak.issuer,realm: environment.keycloak.realm,clientId: environment.keycloak.clientId
                },loadUserProfileAtStartUp: true,initOptions: {
                onLoad: 'check-sso',checkLoginIframe: true,pkceMethod: 'S256'
              },bearerExcludedUrls: ['/']
            }).then(async a => {
              appService.setLoggedIn(a);  // passing authorization status: true or false to appservice for later use
            });
            resolve();
          } catch (error) {
            reject(error);
          }
        })
      };
}

Keycloak-js 有很多功能:(https://www.keycloak.org/docs/latest/securing_apps/)。 例如我如何使用这个方法:createlogoutUrl(options)。

当我尝试执行 keycloak.createlogoutUrl() 时,它说 keycloak(来自 keycloak-angular 的 KeycloakService)没有此功能

如何从我的 keycloak 实例访问这个额外的功能

解决方法

我找到了解决方案。 keycloka-angular 有方法 getKeycloakInstance()。,文档中没有提到它,但我找到了它的例子。

let keycloakInstance = keycloak.getKeycloakInstance();

现在,我的属性 keycloakInstance 可以访问所有 keycloak-js 属性和方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...