javascript - Angular 5 + Keycloak 允许匿名用户

标签 javascript angular keycloak

我正在尝试允许匿名用户访问我的应用程序,并且我正在使用这个库:'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 服务器的登录提示。有什么方法可以只按需触发登录吗?

谢谢

最佳答案

是的,这是可以做到的。当您使用工厂提供程序时,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
    }
  });
}

关于javascript - Angular 5 + Keycloak 允许匿名用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48408371/

相关文章:

Tomcat 使用 FormAuthentication 而不是 KeyCloak Tomcat Valve SAML 身份验证

javascript - 支持在 YUI 中编码查询字符串或 POST 数据吗?

javascript - 使用标签和跨度的表

javascript - Bootstrap、jQuery 在模态中不起作用

javascript - RouterModule.forRoot() 调用了两次

c# - keycloak 不适用于 asp.net MVC5 web 应用程序 (C#)

macos - M1 mac 无法运行 jboss/keycloak docker 镜像

javascript - 始终使用 Bower.json 从 git 提取最新版本的代码

angular - 无法获取未定义或空引用的属性 'toLowerCase'

angular - 如何将Angular应用作为Docker容器运行