gpt4 book ai didi

angular - keycloak-angular : Multi-tenant application

转载 作者:行者123 更新时间:2023-12-05 06:28:21 30 4
gpt4 key购买 nike

我已经安装了 keycloak-angular 包,我使用它就像这样的描述: https://www.npmjs.com/package/keycloak-angular

问题是在我的应用程序中我想要 Multi-Tenancy 。这意味着在应用程序加载期间不知道域名。

在说明中说“KeycloakService 应该在应用程序加载期间使用 APP_INITIALIZER token 进行初始化”,问题是该领域是由用户提供的,并且在应用程序初始化期间无法访问。

有什么建议可以在我的应用程序运行期间而不是在应用程序加载期间设置领域字符串吗?

最佳答案

我已经通过变通和默认领域来初始化应用程序,首先创建一个预登录页面,该页面用于手动选择领域或根据用户输入调用 api,此页面也应排除在外auth guard,在预登录页面的操作中,将所选领域保存在本地存储中,并使用新领域再次初始化 keycloack 服务。应用初始化代码

return keycloak.init({
config: {
url: environment.authUrl,
realm: window.localStorage.getItem('realm') || 'default',
clientId: window.localStorage.getItem('client') || 'default',
},
initOptions: {
onLoad: 'check-sso',
checkLoginIframe: true,
checkLoginIframeInterval: 5,
},
loadUserProfileAtStartUp: true,
enableBearerInterceptor: true,
});

预登录页面操作

submitForm() {
if (this.preloginForm.valid) {
this.authService.getMapping(this.preloginForm.value.email).subscribe((res) => {
localStorage.setItem('realm', res.realmId);
localStorage.setItem('client', res.clientId);
const config = {
url: environment.authUrl,
realm: res.realmId,
clientId: res.clientId
};
this.keycloakService.init({
config,
initOptions: {
onLoad: 'check-sso',
checkLoginIframe: true,
checkLoginIframeInterval: 5,
},
loadUserProfileAtStartUp: true,
enableBearerInterceptor: true,
}).then();
await this.keycloakService.login({
redirectUri: window.location.origin + '/home',
});
});
}
}

关于angular - keycloak-angular : Multi-tenant application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54398339/

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