2017-09-26 8 views
1

ヘッダーフィールドを追加するために角(4.3.6)HttpInterceptorを書きましたが、デバッガーでヘッダーを検査するとヘッダーが更新されません。何か案が?角型HttpInterceptorがヘッダーを変更していない

import {Injectable} from '@angular/core'; 
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest} from '@angular/common/http'; 
import {Observable} from 'rxjs/Observable'; 

@Injectable() 
export class AuthInterceptor implements HttpInterceptor { 


    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 

     console.log('AuthInterceptor at work'); 

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

     const token = localStorage.getItem('token'); 
     if (token) { 
      const authReq = contentTypeReq.clone({ 
       headers: req.headers.set('Authorization', 'Bearer ' + token) 
      }); 
      return next.handle(authReq); 
     } 

     // Pass on the cloned request instead of the original request. 
     return next.handle(contentTypeReq); 
    } 
} 
+0

コンテンツタイプを設定することは無意味です。 Angularはあなたのためにそれを行います。デバッガを使用してコードを実行しましたか?または、console.log()を追加してトークンが設定されていることを確認してください。 –

+0

はい - 私はデバッガでそれを実行し、そのbeeingが呼び出されたことを確認します。しかしヘッダーは更新されません。 https://angular.io/guide/http#setting-new-headers – netshark1000

答えて

0

これらは怠惰です。

req.headers.keys() 

をあなたが値を確認したい場合は、getまたはgetAllメソッドを使用することができます:

req.headers.getAll('Content-Type') 
をあなただけの呼び出し、それらをチェックしたい場合は

keys(): string[] { 
    this.init(); <== initialize 

    return Array.from(this.normalizedNames.values()); 
} 

:たとえばkeys methodのためのようになります。

またはinitメソッドをコンソールから呼び出すことができます。それはあまりにもinitメソッドを呼び出すforEach方法を使用しています。またangular adds headers to requestheaders地図

enter image description here

の電子ヘッダ。

+0

を参照して、これらのヘッダーを更新することができますか?たとえば、リクエストに「x-auth-token」を送信し、401が発生した場合はヘッダーを更新できますか?詳細情報の参照:[https://stackoverflow.com/questions/48200491/request-header-is-not-updated-successfully-from-interceptor-angular-2-4-401-han] –

関連する問題