Bro*_*het 3 typescript jhipster okta angular
致 Okta 文档:https://developer.okta.com/docs/guides/sign-into-spa/angular/main/#configure-the-sdk,我已将我的应用程序配置为通过 Google 进行身份验证。
\n所以,我已经实现了 OktaAuthModule 但我总是遇到这个错误:
\ncore.js:6498 ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(AppModule)[OktaAuth -> OktaAuth -> OktaAuth]: \n NullInjectorError: No provider for OktaAuth!\nNullInjectorError: R3InjectorError(AppModule)[OktaAuth -> OktaAuth -> OktaAuth]: \n NullInjectorError: No provider for OktaAuth!\n at NullInjector.get (core.js:11120)\n at R3Injector.get (core.js:11287)\n at R3Injector.get (core.js:11287)\n at R3Injector.get (core.js:11287)\n at NgModuleRef$1.get (core.js:25352)\n at Object.get (core.js:25066)\n at lookupTokenUsingModuleInjector (core.js:3354)\n at getOrCreateInjectable (core.js:3466)\n at Module.\xc9\xb5\xc9\xb5directiveInject (core.js:14756)\n at NodeInjectorFactory.LoginComponent_Factory [as factory] (login.component.ts:10)\n at resolvePromise (zone.js:1213)\n at resolvePromise (zone.js:1167)\n at zone.js:1279\n at ZoneDelegate.invokeTask (zone.js:406)\n at Object.onInvokeTask (core.js:28679)\n at ZoneDelegate.invokeTask (zone.js:405)\n at Zone.runTask (zone.js:178)\n at drainMicroTaskQueue (zone.js:582)\nRun Code Online (Sandbox Code Playgroud)\n以下是已实施的不同代码:
\n应用程序模块.ts
\nimport { NgModule } from \'@angular/core\';\nimport { BrowserModule } from \'@angular/platform-browser\';\nimport { AppComponent } from \'./app.component\';\nimport { AppRoutingModule } from \'./app-routing.module\';\nimport { BrowserAnimationsModule } from \'@angular/platform-browser/animations\';\nimport {LoginModule} from "./login/login.module";\n\n@NgModule({\n declarations: [\n AppComponent,\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n LoginModule\n ],\n exports: [BrowserAnimationsModule],\n providers: [],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\nRun Code Online (Sandbox Code Playgroud)\n登录模块.ts
\nimport { NgModule } from \'@angular/core\';\nimport { CommonModule } from \'@angular/common\';\nimport {\n OKTA_CONFIG,\n OktaAuthModule,\n} from \'@okta/okta-angular\';\n\nimport { OktaAuth } from \'@okta/okta-auth-js\';\nimport {LoginComponent} from "./login.component";\n\nconst OKTA_DOMAIN = \'<my Okta Domain>\';\nconst CLIENT_ID = \'<MY ID>\'\nconst CALLBACK_PATH = \'/login/callback\';\n\nconst ISSUER = `https://${OKTA_DOMAIN}/oauth2/default`;\nconst HOST = window.location.host;\nconst REDIRECT_URI = `http://${HOST}${CALLBACK_PATH}`;\nconst SCOPES = \'openid profile email\';\n\nconst config = {\n issuer: ISSUER,\n clientId: CLIENT_ID,\n redirectUri: REDIRECT_URI,\n scopes: SCOPES.split(/\\s+/)\n};\n\nconst oktaAuth = new OktaAuth(config);\n\n@NgModule({\n declarations: [LoginComponent],\n imports: [\n CommonModule,\n OktaAuthModule\n ],\n providers: [\n { provide: OKTA_CONFIG, useValue: { oktaAuth } },\n ],\n})\nexport class LoginModule { }\nRun Code Online (Sandbox Code Playgroud)\n登录.组件.ts
\nimport { Component } from \'@angular/core\';\nimport {OktaAuthStateService} from "@okta/okta-angular";\nimport {OktaAuth} from "@okta/okta-auth-js";\n\n@Component({\n selector: \'app-login\',\n templateUrl: \'./login.component.html\',\n styleUrls: [\'./login.component.css\']\n})\nexport class LoginComponent {\n\n constructor(public authStateService: OktaAuthStateService, public oktaAuth: OktaAuth) { }\n\n async login() {\n await this.oktaAuth.signInWithRedirect({\n originalUri: \'/configured-redirect-path\'\n });\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n登录.component.html
\n<button *ngIf="!(authStateService.authState$ | async)?.isAuthenticated" (click)="login()">\n Login\n</button>\nRun Code Online (Sandbox Code Playgroud)\n您知道使用 OktaAuth 的这段代码有什么问题吗?
\n更新1
\n我在登录模块中有更新导出
\nimport { NgModule } from \'@angular/core\';\nimport { CommonModule } from \'@angular/common\';\nimport {\n OKTA_CONFIG,\n OktaAuthModule,\n} from \'@okta/okta-angular\';\n\nimport { OktaAuth } from \'@okta/okta-auth-js\';\nimport {LoginComponent} from "./login.component";\n\nconst OKTA_DOMAIN = \'...\';\nconst CLIENT_ID = \'...\';\nconst CALLBACK_PATH = \'/login/callback\';\n\nconst ISSUER = `https://${OKTA_DOMAIN}/oauth2/default`;\nconst HOST = window.location.host;\nconst REDIRECT_URI = `http://${HOST}${CALLBACK_PATH}`;\nconst SCOPES = \'openid profile email\';\n\nconst config = {\n issuer: ISSUER,\n clientId: CLIENT_ID,\n redirectUri: REDIRECT_URI,\n scopes: SCOPES.split(/\\s+/)\n};\n\nconst oktaAuth = new OktaAuth(config);\n\n@NgModule({\n declarations: [LoginComponent],\n imports: [\n CommonModule,\n OktaAuthModule\n ],\n exports: [\n CommonModule,\n OktaAuthModule\n ],\n providers: [\n { provide: OKTA_CONFIG, useValue: { oktaAuth } },\n ],\n})\nexport class LoginModule { }\nRun Code Online (Sandbox Code Playgroud)\n但没有变化
\n如果您使用的是@okta/okta-auth-jsversion 5.x,那么您需要使用OKTA_AUTH注入令牌来注入 OktaAuth ,如下所示:
import { OKTA_AUTH } from '@okta/okta-angular';
export class LoginComponent {
constructor(public authStateService: OktaAuthStateService, @Inject(OKTA_AUTH)
public oktaAuth: OktaAuth) {}
}
Run Code Online (Sandbox Code Playgroud)
请参阅迁移指南
| 归档时间: |
|
| 查看次数: |
4568 次 |
| 最近记录: |