2017-07-31 15 views
2

だから私はHttpModuleangular2-jwt libを使っていた私の "古い"コードを移行しています。私は、以下の設定とangular2-jwt仕事作ることができ、前に依存関係を@ auth0-angular-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から始めて、forRootoptions providerを受け入れ:

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

あなたの答えのおかげで、残念ながらそれはしていません(少なくとも私のために)...それは次のエラーをスローする: 'ヌルのプロパティ' split 'を読むことができません。 'tokenGetter'が' useFactory'で設定されていてもnullであるようです。 –

+0

私と同じソリューションが期待通りに機能します。プロバイダのオーバーライドはAngularではかなり簡単ですが、JWT_OPTIONSを提供し、JwtModuleをさまざまなモジュール(競合状態)にインポートすると機能しないことがあります。コンパイルエラーがなく、最新のパッケージバージョン(1.0.0-beta.6)を使用してください。 JwtModuleをインポートするのではなく、そのようなモジュールを[providers] [https://github.com/auth0/angular2-jwt/blob/v1.0/index.ts#L33-L44]で再アセンブルしようとすることはできますが、結果は上記と同じになります。 – estus

+0

私は 'app.module'ですべてをやっていますが、コンパイルエラーはなく、バージョンは最新です(1.0.0-beta.6)。 –

関連する問題