我不完全了解如何将OAuth2访问令牌从promise(oidc-client-js)提供给使用Swagger-CodeGen生成的API代码。将OAuth2访问令牌配置为typescript-angular2客户端
提供常量值很容易,但如何更改以下来从oidc-client-js获取用户的访问令牌?我想知道“正确”的方式。将此令牌粘贴到全局变量的某个位置很容易。
@NgModule({
imports: [
CommonModule,
ApiModule.forConfig(() => new Configuration({
accessToken: 'my-access-token' //this can also be a() => string function
}))
],
与正常OnInit的组成部分,我可以得到令牌从OIDC-客户的UserManager的实例的承诺。让这两件事合在一起让我感到困惑。一个看起来像静态配置,另一个需要订阅单身人士的承诺。
this.userSubscription = this.authService.getUser().subscribe((user) => {
if (user) {
this.access_token = user.access_token;
}
});
任何纠正我做错的事情也将不胜感激。这是我使用Angular的第一个原型。
更新
应用Ben的建议,并抽出时间来了解APP_INITIALIZER(这是试验非常稀少IMO文件)后,感觉就像矫枉过正。我与它被注射到扬鞭,CodeGen将产生打字稿,Angular2服务代码配置类以下定义提供结束:
providers: [
AuthService,
AuthGuardService,
{
provide: Configuration,
useFactory: (authSvc: AuthService) => new Configuration({accessToken: authSvc.getAccessToken.bind(authSvc)}),
deps: [AuthService],
multi: false
}
]
我改变了我的AuthService来存储服务的用户的最新的access_token。从Swagger-CodeGen生成的代码中调用getAccessToken()
方法,并返回用于HTTP标头的最新jwt。它感觉干净,它的工作原理。请让我知道如果(以及为什么)这是解决我的问题的错误方法。