1

私は自分のアプリケーションでグローバル認証ヘッダーを作成しています。インターセプタを使用したので、get()関数で承認ヘッダを宣言しません。 get()関数を呼び出すと、トークンを依頼するので、インターセプタを正しく実装しています。それはトークンが提供されていないと言います。私のauth.interceptorに問題はありますか?すべてのget()関数で認証ヘッダーベアラートークンを宣言する必要がありますか?リクエストが送受信されるたびにインターセプタが呼び出されたと思いますか?HttpClientインターセプタでグローバル認証ヘッダーを作成する

auth.interceptor.ts

@Injectable() 
export class AuthInterceptor implements HttpInterceptor { 
    private authService: AuthService; 

    constructor(private injector: Injector) {} 

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
     // Get the auth header from the service. 
     this.authService = this.injector.get(AuthService); 
     const token = this.authService.getToken(); 
      if (token) { 
       req = req.clone({ headers: req.headers.set('Authorization', 'Bearer ' + token) }); 
      } 

      if (!req.headers.has('Content-Type')) { 
       req = req.clone({ headers: req.headers.set('Content-Type', 'application/json') }); 
      } 

      req = req.clone({ headers: req.headers.set('Accept', 'application/json') }); 
      return next.handle(req); 
     } 
} 

products.component.ts

getAll() { 
    return this.httpClient.get<any>(this.url).map(response => response.json()); 
    } 

答えて

1

あなたは正しい方法をやっています!

インターセプタはすべてのhttpコールをインターセプトするためのもので、グローバルなリクエストを変更できます。

私はこれらの状態での問題だと思います。それらをデバッグして解決することができます。

  if (token) { 
       req = req.clone({ headers: req.headers.set('Authorization', 'Bearer ' + token) }); 
      } 

      if (!req.headers.has('Content-Type')) { 
       req = req.clone({ headers: req.headers.set('Content-Type', 'application/json') }); 
      } 

多分いくつかはnullを返しています。

ただし、トークンを取得するタイミングが問題であれば、トークンを取得するために非同期呼び出しを行うことができます。

this.authService.LoginUser().subscribe((token) => { 
    if (token) { 
    req = req.clone({ headers: req.headers.set('Authorization', 'Bearer ' + token) }); 
    } 

    if (!req.headers.has('Content-Type')) { 
    req = req.clone({ headers: req.headers.set('Content-Type', 'application/json') }); 
    } 

    req = req.clone({ headers: req.headers.set('Accept', 'application/json') }); 
    return next.handle(req); 
} 
}); 
+0

デバッグしようとします。コンテンツタイプかもしれない聞いたことがありません –

+0

しかし、なぜ私は自分のアプリにログインできますか?どのように私はそれをデバッグすることができます> – Joseph

+0

いくつかのブレークポイントを入れて、実行がここに来て、すべてが大丈夫です参照してください参照してください。もう一つ。このインターセプタをモジュールに追加したと思いますか? –

関連する問題