我不是专家,但是我需要解决这个问题,以便任何帮助。
我们已经构建了一个角度应用程序(使用角度版本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'
};
}