Конфигурация Angular Runtime не работает с созданием диспетчера пользователей - PullRequest
0 голосов
/ 21 февраля 2019

Я не специалист по угловым характеристикам, но мне нужно решить эту проблему, поэтому любая помощь будет благодарна.

Мы создали угловое приложение (с использованием угловой версии 7.x).Поскольку это приложение будет развернуто глобально, я решил не использовать environment.X.ts для наших переменных среды, так как мне пришлось бы создавать приложение несколько раз, чтобы выпустить его.Вместо этого я нашел статью, в которой объясняется, как настроить конфигурацию «времени выполнения» через файл JSON, который будет загружен после того, как приложение будет на устройстве пользователя.

Сегодня мы начали интегрировать клиент oidc, но столкнулись сстранностьКогда мы пытаемся получить доступ к конфигурации времени выполнения для настройки параметров диспетчера пользователей, мы получаем ошибки, что данные нулевые.Это показалось нам странным, потому что мы внедряем этот AppConfigureService в другие части без проблем.Кто-то установил угловое приложение с клиентом oidc, который использует динамически загруженную конфигурацию?

Ниже приведен фрагмент кода, который мы используем в настоящее время.

app-config.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class AppConfigService {
  private appConfig;

  constructor(private http: HttpClient) { }

  loadAppConfig() {
    return this.http.get('/assets/config/appConfig.json')
      .toPromise()
      .then(data => {
        this.appConfig = data;
      });
  }

  getConfig() : AppConfig {
    return this.appConfig;
  }
}

export class AppConfig {
  auth_authority: string;
  auth_redirect_uri: string;
  auth_post_logout_redirect_uri: string;
  oc_api_url: string;
  comm_api_url: string;
}

auth.service.ts
Некоторый код опущен для экономии места

import { Injectable } from '@angular/core';

import { UserManager, UserManagerSettings, User } from 'oidc-client';
import { fail } from 'assert';

import { AppConfigService, AppConfig } from '../services/app-config.service';
import { environment } from '../environments/environment';
import { debug } from 'util';

@Injectable()
export class AuthService {
  private appConfigService: AppConfigService = null;
  private manager: UserManager = null;
  private user: User = null;

  constructor(private appConfig: AppConfigService) {
    this.appConfigService = appConfig;
    this.appConfigService.loadAppConfig()
    .then(()=>{
      this.manager = new UserManager(getClientSettings(this.appConfigService.getConfig()))
      this.manager.getUser().then(user => {
        this.user = user;
      });
    });
.
.
.
  }
.
.
.
}

export function getClientSettings(appConfig: AppConfig): UserManagerSettings {
  return {
    authority: appConfig.auth_authority,
    client_id: environment.auth_client_id,
    redirect_uri: appConfig.auth_redirect_uri,
    post_logout_redirect_uri: appConfig.auth_post_logout_redirect_uri,
    response_type: "id_token token",
    scope: environment.auth_scope,
    filterProtocolClaims: true,
    loadUserInfo: true
    //automaticSilentRenew: true,
    //silent_redirect_uri: 'http://localhost:4200/silent-refresh.html'
  };
}
...