#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`
`}`