如何为adal-angular6配置生成动态数据

时间:2019-04-03 11:28:16

标签: javascript angular azure web adal

我当前正在连接到AAD和天蓝色图api,获取了我需要的所有信息及其功能。我的问题是我的'adalConfig'属性是这样硬编码的:

在app.module中>导入:

         c.MsAdalAngular6Module.forRoot({
         tenant: '080werg-1e3r-5dnb-8c3b-e37ttrr8ee8',
         clientId: '080werg-080werg-080werg-080werg-080werg',
         redirectUri: window.location.origin,
         endpoints: {
            "https://cloudcrp-client.azurewebsites.net": "080werg- 80werg- 
             080werg- 080werg- 080werg",
         },
         navigateToLoginRequestUrl: false,
    }),

这对我来说非常不好,因为我们有几个客户,每个客户都需要不同的信息。 我要做的是从服务器获取具有正确详细信息的信息。因此,基本上以异步方式以某种方式使用.forRoot。

我找到了这篇文章:https://devblogs.microsoft.com/premier-developer/angular-how-to-microsoft-adal-for-angular-6-with-configurable-settings/ 我认为它与我想要实现的目标足够相关,但我只是想不通。

TIA

1 个答案:

答案 0 :(得分:0)

所以我终于做到了,毕竟那并不困难。我将逐步完成我所有“ adal”配置的步骤。 请参考以下文章,该文章对您有很大帮助:  https://devblogs.microsoft.com/premier-developer/angular-how-to-microsoft-adal-for-angular-6-with-configurable-settings/

app.module.ts:

export let adalConfig
export function getConfig(){
    return adalConfig
}

上面的函数(在providers部分中)将用于为providers数组提供adalConfig变量。

export function loadConfigurations(connectionService: ConnectionService) {
    return () => connectionService.getConfigs().then(((adalConficObj: azureActiveDirectoryModel)=> {
        adalConfig = {
            tenant: adalConficObj.Tenant,
            clientId: adalConficObj.ClientID,
            redirectUri: window.location.origin,
            endpoints: {
                [adalConficObj.EndPoint]: adalConficObj.ObjectID,
            },
            navigateToLoginRequestUrl: false,
        }                
    }));
}

在上面的函数中,我返回一个解决Promise的函数(我将在需要Promise的APP_INITIALIZER中使用此函数-否则会出现错误) Promise来自My connectionService,它在我的应用程序中负责连接到服务器。 getConfigs()很简单:

    getConfigs(): Promise<Object> {
        return this.HttpClient.get(this.getURL('GetAzureActiveDirectoryconfiguration')).toPromise()

    }

http / httpClient使用可观察对象和订阅,但是由于我想要一个Promise,所以我使用.toPromise函数。

如果您已阅读本文,您会发现我没有使用forRoot()启动MsAdalAngular6Module,因为我想从服务器获取所有adalConfig信息。

imports: [

    c.MsAdalAngular6Module,

],

根据我的理解,MsAdalAngular6Module将使用providers数组中提供的变量来构造MsAdalAngular6Service(同样,使用forRoot()中的硬编码进行安装)

app.modules中的providers数组:


        {
            provide: APP_INITIALIZER,
            useFactory: loadConfigurations,
            deps: [ConnectionService], // dependancy
            multi: true
        },
        {
            provide: 'adalConfig',
            useFactory: getConfig,
            deps: []
        },

            MsAdalAngular6Service

APP_INITIALIZER基本停止应用程序的启动,直到useFactory中提供的功能完成。 在下一节中,我们将在adalConfig对象具有相关数据之后,“为其”提供程序数组。我们提供了变量本身(提供:'adalConfig'),因此此函数可以将其返回(useFactory:getConfig,),因为getConfig()不使用传递给它的任何属性,因此deps:是多余的。

我真的希望这会有所帮助,如果我做错了什么,请纠正我。

有关更多信息,请参阅: https://angular.io/guide/dependency-injection-providers Angular: How to correctly implement APP_INITIALIZER