Я не знаю, является ли это oidc или Angular, или и тем, и другим. Различные представления одного и того же строкового значения приводят к тому, что полномочия не распознаются:
Работает, если я ввожу значение напрямую:
authority: 'http://my.url.com'
// no errors
Не работает получение значения от услуги:
authority: this.settingsService.settings.stsAuthority
// MetadataService.getMetadata: No authority or metadataUrl configured on settings.
// console.log(this.settingsService.settings.stsAuthority) => 'http://my.url.com'
// console.log(typeof(this.settingsService.settings.stsAuthority)) => string
Работает получение значения из другого класса в другом файле:
authority: Constants.stsAuthority
---
export class Constants {
stsAuthority = 'http://my.url.com';
}
// no errors
// console.log(Constants.stsAuthority) => 'http://my.url.com'
// console.log(typeof(Constants.stsAuthority)) => string
Не работает получение значения из другого класса в другом файле, ЕСЛИ ФАЙЛ использует значение службы:
authority: Constants.stsAuthority
---
export class Constants {
stsAuthority = this.settingsService.settings.stsAuthority;
}
// MetadataService.getMetadata: No authority or metadataUrl configured on settings.
Использование замены строки в значении службы становится неопределенным, но не вызывает ошибок:
authority: Constants.stsAuthority
---
export class Constants {
stsAuthority = `${this.settingsService.settings.stsAuthority}`;
}
// GET https://rootUrl/**undefined**/.well-known/openid-configuration 404
Теперь вы думаете: «Что-то не так с сервисом!» Но каждый раз, когда я регистрирую значение сервиса, я получаю правильное значение. Вот сервисный код, который доставляет значения URL:
@Injectable({
providedIn: 'root'
})
export class SettingsService {
public settings: Settings;
constructor() {
this.settings = new Settings();
}
}
Это еще одна служба APP_INITIALIZER, которая получает значения настроек из среды:
settings.http.service.ts
@Injectable({
providedIn: "root"
})
export class SettingsHttpService {
constructor(private http: HttpClient, private settingsService: SettingsService) { }
initializeApp(): Promise<any> {
return new Promise(
(resolve) => {
this.http.get('assets/settings.json')
.toPromise()
.then(response => {
this.settingsService.settings = <Settings>response;
resolve();
})
}
);
}
}
Вот каков результат и вот что возвращает settings.service:
{
"clientRoot": "http://my.url.com",
}