如何在运行时配置MsAdalAngular6Module?

时间:2018-10-04 19:33:58

标签: javascript angular typescript adal microsoft-adal-angular6

我正在使用此Microsoft adal包装器来管理有角度的单页应用程序中的身份验证:https://github.com/manishrasrani/ms-adal-angular6

根据文档,我在编译时像这样配置所有各种选项,它们可以按预期工作。

@NgModule({
imports: [
    MsAdalAngular6Module.forRoot({
      tenant: '<YOUR TENANT>',<-------------------------------- ADD
      clientId: '<YOUR CLIENT / APP ID>',<--------------------- ADD
      redirectUri: window.location.origin,
      endpoints: { <------------------------------------------- ADD
        "https://localhost/Api/": "xxx-bae6-4760-b434-xxx",
        ---
        ---
      },
      navigateToLoginRequestUrl: false,
      cacheLocation: '<localStorage / sessionStorage>', <------ ADD
    }),
    ---
    ---
  ],
  ---
  ---
})

但是,由于我拥有自动部署管道,并且具有需要唯一设置的多个环境(开发,测试,生产等)-我想改为运行时。也就是说,我不想为部署到的每个环境重新编译。

我遵循了本指南,了解如何在rutime:https://juristr.com/blog/2018/01/ng-app-runtime-config/上从json文件中加载设置,效果很好,但是如何在运行时将值以这种方式加载到MsAdalAngular6Module中?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我通过在自己的服务中创建库中唯一需要的东西MsAdalAngular6Service来解决了这个问题。因此,我不需要导入MsAdalAngular6Module。缺点是您不能再使用其AuthenticationGuard。但这不应该是一个大问题,这是一个简单的if-else,只需查看其代码即可。

我自己的服务如下:

import { Injectable } from '@angular/core';
import { MsAdalAngular6Service } from "microsoft-adal-angular6";
import { ConfigurationService } from "../configuration.service";

@Injectable( {
    providedIn: 'root'
} )
export class MsAdalAdapterService {

    private _adalSvc: MsAdalAngular6Service;

    constructor( private configService: ConfigurationService ) {
        this._adalSvc = new MsAdalAngular6Service( configService.adalConfig );
    }

    get adalSvc(): MsAdalAngular6Service {
        return this._adalSvc;
    }
}

也许对某人有用。