gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:03:50 25 4
gpt4 key购买 nike

我正在尝试允许匿名用户访问我的应用程序,并且我正在使用这个库:'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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com