2017-07-31 87 views
2

所以...我正在迁移使用HttpModuleangular2-jwt库的“旧”代码。如何将依赖关系传递给@ auth0-angular-jwt?

之前,我可以做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 {} 

这可能吗?提前致谢。

回答

1

这可以通过重写配置服务来完成:

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接受options provider

... 
imports: [ 
    JwtModule.forRoot({ 
     jwtOptionsProvider: { 
      provide: JWT_OPTIONS, 
      deps: [Dependency], 
      useFactory: jwtOptionsFactory 
     } 
    }) 
] 
+0

谢谢您的回答,遗憾的是它不工作(至少对我来说)...它会抛出以下错误:'无法读取属性'拆分'null'。它看起来像'tokenGetter'甚至在'useFactory'中设置它为空。 –

+0

非常相似的解决方案适用于我的预期。在Angular中提供者重写相当简单,如果您在不同模块中提供JWT_OPTIONS并导入JwtModule(竞争条件),则可能无法正常工作。确保你没有编译错误并使用最新的软件包版本(1.0.0-beta.6)。您可以尝试在'providers' [像这样](https://github.com/auth0/angular2-jwt/blob/v1.0/index.ts#L33-L44)中重新组装模块,而不是导入JwtModule,但结果应该与上面相同。 – estus

+0

我正在做'app.module'中的所有内容,并且我没有任何编译错误,并且版本是最新版本(1.0.0-beta.6)。 –

相关问题