2017-05-26 91 views
0

我不完全了解如何将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。它感觉干净,它的工作原理。请让我知道如果(以及为什么)这是解决我的问题的错误方法。

回答

相关问题