Конфигурация угловой динамической нагрузки для MSAL

#angular #asp.net-core #.net-core #msal

Вопрос:

Я следовал этому руководству https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/configuration.md для динамической загрузки конфигурации с помощью заводских поставщиков и APP_INITIALIZER.

Я извлекаю настройки из API .Net Core, который считывает данные из appsettings.json.

Все работает нормально, и вход в мое приложение работает. Однако, когда браузер обновляется после аутентификации и выполняются http-вызовы. Приложение не загружается с ошибкой:

 ERROR Error: Uncaught (in promise): TypeError: Cannot read properties of undefined (reading 'settings')
TypeError: Cannot read properties of undefined (reading 'settings')
    at Object.MSALInstanceFactory [as useFactory] (:44340/main.js:5200)
    at Object.factory (:44340/vendor.js:88500)
    at R3Injector.hydrate (:44340/vendor.js:88411)
    at R3Injector.get (:44340/vendor.js:88232)
    at injectInjectorOnly (:44340/vendor.js:82160)
    at Module.ɵɵinject (:44340/vendor.js:82164)
    at Object.MsalService_Factory [as factory] (:44340/vendor.js:35264)
    at R3Injector.hydrate (:44340/vendor.js:88411)
    at R3Injector.get (:44340/vendor.js:88232)
    at injectInjectorOnly (:44340/vendor.js:82160)
    at resolvePromise (:44340/polyfills.js:10063)
    at resolvePromise (:44340/polyfills.js:10015)
    at :44340/polyfills.js:10125
    at ZoneDelegate.invokeTask (:44340/polyfills.js:9664)
    at Object.onInvokeTask (:44340/vendor.js:105535)
    at ZoneDelegate.invokeTask (:44340/polyfills.js:9663)
    at Zone.runTask (:44340/polyfills.js:9432)
    at drainMicroTaskQueue (:44340/polyfills.js:9834)
 

Ответ №1:

Когда вы обновляете браузер, ваш код получает доступ к значению «настройка» должным образом до его инициализации. Вы должны убедиться, что свойство обновления инициализировано, прежде чем обращаться к его значению. В документе, которым вы поделились, вы используете свойство настройки в файле config.service.ts. Вам нужно инициализировать свойство следующим образом:

 ` private settings: any = {};` 
 

Прежде чем получить доступ к его значению, вам нужно проверить, является ли оно нулевым из неопределенного, как это:

 `if (this.setting amp;amp; this.setting !== null) {`
`// you logic`
`}`