使用Okta-Angular遇NullInjectorError:无ET提供者问题求助
解决Okta-Angular的NullInjectorError: No provider for ET!问题
以下是针对该问题的排查和解决方案:
确认Okta配置完整性
确保environment.myConfig包含Okta初始化所需的所有必填字段,缺少必填项会导致内部服务无法正常注入:// environment.ts示例配置 export const environment = { myConfig: { clientId: '你的Okta客户端ID', issuer: 'https://你的Okta域名.com/oauth2/default', redirectUri: window.location.origin + '/login/callback', scopes: ['openid', 'email', 'profile'] } };临时显式提供OKTA_CONFIG令牌
尽管文档标注providers方式已弃用,但可以尝试显式添加到providers中来排查注入问题:@NgModule({ declarations: [], imports: [OktaAuthModule.forRoot(moduleConfig)], providers: [ { provide: OKTA_CONFIG, useValue: moduleConfig } ], bootstrap: [AppComponent] }) export class AppModule { }如果此方法有效,说明
forRoot()的内部初始化逻辑可能存在版本兼容性问题,后续可尝试升级依赖解决。验证依赖版本兼容性
Angular 15与@okta/okta-angular 6.x、@okta/okta-auth-js 7.x理论兼容,但小版本bug可能导致注入失败。尝试升级到最新兼容版本:npm install @okta/okta-angular@latest @okta/okta-auth-js@latest获取未混淆的错误信息
即使关闭了优化,还需确保sourceMap开启,才能看到"ET"对应的真实服务名称。修改angular.json的development配置:"configurations": { "development": { "optimization": false, "sourceMap": true, "extractLicenses": false, "vendorChunk": true, "buildOptimizer": false } }重新构建后,错误信息会显示真实的服务类名,便于精准定位问题。
排查延迟加载模块配置
如果项目中有延迟加载模块,需确保延迟加载模块中导入OktaAuthModule.forChild()而非forRoot(),且不要重复提供Okta配置。清理依赖缓存
清理旧依赖后重新安装,避免缓存导致的版本冲突:rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者ascendev
相关产品推荐
相关产品推荐

