初始化 keycloak 服务时未定义文档

问题描述 投票:0回答:1

我正在开发需要集成 keycloak 的角度应用程序。我使用 Angular 18 和 keycloak.ja 24.0.2 版本。

这是 keycloak 服务启动的代码。

import Keycloak from 'keycloak-js';
import { KeycloakService } from 'keycloak-angular';

export function initializeKeycloak(keycloak: KeycloakService): () => Promise<boolean> 
{
  return (): Promise<boolean> =>
  keycloak.init({
  config: {
    url: 'http://localhost:8080/auth',
    realm: 'MyRealm',
    clientId: 'angular-app',
  },
  initOptions: {
    onLoad: 'login-required',
  },
});
}

Error occured when keycloak try to initialize

仅供参考,这是app.config

export const appConfig: ApplicationConfig = {
 providers: 
  [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), 
  provideClientHydration(), KeycloakService,
 {
  provide: APP_INITIALIZER,
  useFactory: initializeKeycloak,
  multi: true,
  deps: [KeycloakService]
  }
 ]

};

提前致谢

angular keycloak keycloak-services angular18
1个回答
0
投票

根据这个 github 问题,您需要将 init 包装在 if 条件中,并仅在

keycloak
存在时执行它。

import Keycloak from 'keycloak-js';
import { KeycloakService } from 'keycloak-angular';

export function initializeKeycloak(keycloak: KeycloakService): () => Promise<boolean> 
{
  return (): Promise<boolean> => {
    if(typeof window !== 'undefined') {
      return keycloak.init({
        config: {
          url: 'http://localhost:8080/auth',
          realm: 'MyRealm',
          clientId: 'angular-app',
        },
        initOptions: {
          onLoad: 'login-required',
        },
      });
    } else {
        return new Promise<Boolean>((resolve, reject) => {
          resolve(true);
        });
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.