我正在使用MSAL,这是我的角度项目的Microsoft身份验证库。在我的app.module.ts
中,我在import部分中添加了msalModule,如下所示:
这在编码和确定如何使其在开发过程中正常工作时很好,但是我需要将redirectUri
,postLogoutRediectUri
和clientID
之类的变量动态设置为生产环境。我尝试使用类似这样的对象:
Object.getClientID()
,Object.getRedirectUri()
,但是我收到一个错误,指出装饰器中不允许使用功能。
在调用app.module.ts
之前,是否可以设置静态变量?还是有另一种方式为MSAL动态加载正确的环境变量?
谢谢
salModule.forRoot({
clientID: "<my-client-id>",
authority: "https://tenant.b2clogin.com/tfp/tenant.onmicrosoft.com/B2C_1_Signin",
redirectUri: "http://localhost:4200/dashboard",
/* default is true */
validateAuthority: false,
cacheLocation : "localStorage",
postLogoutRedirectUri: "http://localhost:4200/",
popUp: false,
})
答案 0 :(得分:0)
我认为您面临的问题与异步提供程序https://github.com/angular/angular/issues/23279
有关我在使用MSAL时遇到了同样的问题,我的解决方法是禁用aot并使用全局范围,这不是一个优雅的解决方案,但是它可以工作(我希望我记得所有步骤):
在HTML页面头部内,使用<script src="assets/conf/config.js"></script>
加载自定义js,该文件的内容应类似于以下内容:window.MY_CONF = { MY_VAR:'my var value here' };
angular.json
文件中的配置中将aot设置为false
在您的角度模块中,使用MsalModule.forRoot(window['MY_CONF'].MY_VAR)
现在,您可以在启动构建任务之前替换config.js
并获得与环境有关的MSAL配置。
注意:这篇文章Angular load external configuration before AppModule loads使用useFactory
功能在角度上实现了相同的结果,但是AFAIK Msal lib不支持该功能。这里有一个特定的github问题,您可能需要检查一下:https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/481