【发布时间】:2022-01-06 07:58:48
【问题描述】:
我想在从 keycloak-angular 库初始化 keycloak 前端组件之前调用 web 服务,以使 keycloakconf 动态化。 backendService.keycloakConfig() webservice 返回正确的值,但 isInitialized 变量始终为 false。
我认为将 Promise 和 Observable 混合会影响初始化。
代码如下:
import {KeycloakService} from 'keycloak-angular';
import {BackendService} from "./service/backend.service";
export function initializer(keycloak: KeycloakService, backendService: BackendService): () => Promise<any> {
return (): Promise<any> => {
return new Promise<void>(async (resolve, reject) => {
backendService.keycloakConfig()
.toPromise()
.then(
keycloakConfig => {
try {
keycloak.init({
config: keycloakConfig,
enableBearerInterceptor: true,
loadUserProfileAtStartUp: false,
initOptions: {
checkLoginIframe: false
},
bearerExcludedUrls: ['/assets']
}).then((isInitialize) => {
console.log("Initialized keycloak", isInitialize)
}).catch(reason => {console.log(reason)})
resolve();
} catch (error) {
console.log("error", error)
reject(error);
}
})
});
};
}
【问题讨论】:
-
您找到答案了吗?我正在尝试做一些非常相似的事情。我最接近的是将配置存储在未经身份验证的页面上的会话存储中,然后在我进行初始化时将其拉入。然而,这不仅不是我真正想要的,而且还会导致登录时出现奇怪的无限循环(页面不断重定向到 keycloak 并返回到自身认为它未经授权) - 但实际的配置加载和初始化在技术上确实有效.
标签: angular keycloak keycloak-angular