2

所以...我正在迁移使用HttpModuleand angular2-jwtlib 的“旧”代码。

之前,我可以angular2-jwt使用以下配置:

export function authHttpServiceFactory(
  http: Http, options: RequestOptions, myService: MyService) {

  return new AuthHttp(new AuthConfig({
    globalHeaders: [{'Content-Type': 'application/json'}],
    noJwtError: true,
    tokenGetter: (() => myService.get('my_token'))
  }), http, options);
}

@NgModule({
  providers: [
    {
      provide: AuthHttp,
      useFactory: authHttpServiceFactory,
      deps: [Http, RequestOptions, MyService]
    }
  ]
})
export class AuthModule {}

...但是现在,要将它与新版本HttpClientModule一起使用,我必须使用版本的angular2-jwt@auth-angular-jwt - 我知道它仍处于测试版)并且我试图弄清楚我需要做访问我的服务以获取令牌(就像我以前那样)。

我的实际配置是(与 git 的示例相同):

@NgModule({
  // ...
  imports: [
    HttpClientModule,
    JwtModule.forRoot({
      config: {
        tokenGetter: () => {
          return <myService>.getToken(); // Here
        }
      }
    })
  ]
})
export class AppModule {}

可能吗?提前致谢。

4

1 回答 1

4

这可以通过覆盖配置服务来完成:

export const jwtOptionsFactory = (dependency) => ({
    tokenGetter: () => dependency.getToken(),
    whitelistedDomains: []
});

...
imports: [
    JwtModule.forRoot({
        config: { tokenGetter(): string { throw new Error('no tokenGetter') } }
    })
],
providers: [{
    provide: JWT_OPTIONS,
    deps: [Dependency],
    useFactory: jwtOptionsFactory
}]

从 1.0.0-beta.8 开始,forRoot接受选项提供者

...
imports: [
    JwtModule.forRoot({
        jwtOptionsProvider: {
            provide: JWT_OPTIONS,
            deps: [Dependency],
            useFactory: jwtOptionsFactory
        }
    })
]
于 2017-07-31T00:47:59.807 回答