как генерировать динамические данные для конфигурации adal-angular6 - PullRequest
0 голосов
/ 03 апреля 2019

В настоящее время я подключаюсь к AAD и Azure Graph API, выбирая все, что мне нужно, и это здорово.Моя проблема в том, что мои свойства 'adalConfig' написаны жестко, как это:

в app.module> import:

         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 голосов
/ 08 апреля 2019

так что я наконец сделал это, и это было не так сложно, в конце концов. Плохо пройдусь по ступеням, что из всей моей "адальной" конфигурации. пожалуйста, обратитесь к следующей статье, которая очень помогла: 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
}

вышеуказанная функция будет использоваться (в разделе провайдеров) для предоставления массиву провайдеров переменной 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,
        }                
    }));
}

в приведенной выше функции я возвращаю функцию, которая разрешает Обещание (я буду использовать эту функцию в APP_INITIALIZER, для которого требуется Обещание - в противном случае вы получите ошибку) Обещание от My connectionService, который в моем приложении отвечает за подключение к нашему серверу. getConfigs () очень прост:

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

    }

http / httpClient использует наблюдаемые и подписку, но, поскольку я хочу обещание, я использую функцию .toPromise.

Если вы прочитали статью, вы увидели, что я не запускал MsAdalAngular6Module с помощью forRoot (), потому что я хотел получить всю информацию adalConfig с сервера.

imports: [

    c.MsAdalAngular6Module,

],

Насколько я понимаю, MsAdalAngular6Module будет использовать предоставленные переменные в массиве провайдеров, чтобы создать MsAdalAngular6Service (опять же, изолированный с помощью жестко закодированных в forRoot ())

массив провайдеров в app.modules:


        {
            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: как правильно реализовать APP_INITIALIZER

...