Angular 5 + Keycloak允许匿名用户

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

我试图允许匿名用户访问我的应用程序,我正在使用这个库:'keycloak-angular'与Angular 5.在描述中,它要求我初始化应用程序,如下所示:

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

export function keycloakInitializer(keycloak: KeycloakService): () => Promise<any> {
return (): Promise<any> => {
    return new Promise(async (resolve, reject) => {
        try {
            await keycloak.init({
                config: {
                    url: 'my-url',
                    realm: 'my-realm',
                    clientId: 'my-client-id'
                },
                initOptions: {
                    onLoad: 'check-sso',
                    checkLoginIframe: false
                }
            });
            resolve();
        } catch (error) {
            reject(error);
        }
    });
};

这样做会自动触发keycloak服务器的登录提示。有没有办法只按需触发登录?

谢谢

javascript angular keycloak
1个回答
2
投票

是的,这可以做到。使用工厂提供程序时,angular会在解析依赖项时调用工厂。

要延迟提示,请将函数包装在返回原始函数的工厂函数中并提供该函数。

这是看起来像

export async function initializeApp(
  keycloak: KeycloakService,
  deferredInitializer: typeof keycloakInitializer
) {
  if (someCondition) {
    const initializer = await deferredInitializer(keycloak);

  }
}
export async function keycloakInitializer(keycloak: KeycloakService) {
  await keycloak.init({
    config: {
      url: 'my-url',
      realm: 'my-realm',
      clientId: 'my-client-id'
    },
    initOptions: {
      onLoad: 'check-sso',
      checkLoginIframe: false
    }
  });
}

const providers = [
  {
    provide: APP_INITIALIZER,
    useFactory: initializeApp,
    deps: [KeycloakService, keycloakInitializer]
  }
];

实际的keycloakInitializer函数编写得非常糟糕,所以我将为后代重构它。

export async function keycloakInitializer(keycloak: KeycloakService) {
  await keycloak.init({
    config: {
      url: 'my-url',
      realm: 'my-realm',
      clientId: 'my-client-id'
    },
    initOptions: {
      onLoad: 'check-sso',
      checkLoginIframe: false
    }
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.