2017-08-25 14 views
0

私のAngular 4アプリケーションにHttpInterceptorがあり、かなりうまくいきました。しかし、私はここにも達成したい何かが利用可能な場合JSONウェブトークンを注入することであるが、私はそれを行うには正しい方法を発見していない、以下のコードを確認してください。HTTPリクエストに認証ヘッダーを追加する - 角度4

import {Injectable} from '@angular/core'; 
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse} from '@angular/common/http'; 
import {Observable} from "rxjs"; 
import {ToasterService} from "angular2-toaster"; 
import 'rxjs/add/operator/do'; 

@Injectable() 
export class GobaeInterceptor implements HttpInterceptor { 
    constructor(private toasterService: ToasterService){ 
    } 
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
     next.handle(req).subscribe(event => { 
       if (event instanceof HttpResponse) { 
        if (localStorage.getItem('Token')) { 
         //THIS ISN'T WORKING: 
         event.headers.append('authentication', `${localStorage.getItem('Token')}`); 
        } 
        let response = event.body; 
        if(response.Error){ 
         this.toasterService.pop('error', 'Error '+response.Code, response.Message); 
        } 
       } 
      }, error => {console.log(error)}); 
     return next.handle(req); 
    } 
} 

それは上昇しませんどんなエラーでもそれはそれを設定しません(私はネットワークタブで要求をチェックしました)。また、同じ結果を持つlocalStorageから取得する代わりに、ハードコードされた文字列を渡そうとしました。ここで

答えて

0

は、私はそれを行う方法です。

export class JWTInterceptor implements HttpInterceptor { 

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

     let headerName: string = 'Authorization'; 

     let authScheme: string = 'Bearer '; 

     let token: string = localStorage.getItem('Token'); 

     return next.handle(() => { 
      return request.clone({ 
       setHeaders: { 
        [headerName]: `${authScheme}${token}` 
       } 
      }); 
     }); 

    } 

} 
+0

ありがとう!これはAngular 4の実装ですか?それは、タイプ '()=> any'の 'url'が欠けていると私に伝えます。それでも、setHeaders:{ [headerName]: '$ {authScheme} $ {token} ' }をコードに統合しましたが、依然として電話でトークンが表示されません。 – Multitut

+0

あなたの警告はわかりません。私のコードは、角度4.3.5の作業コードからコピーされたコピーです。インターセプタが正しくロードされていますか?おそらく、console.logをチェックしてください。 – jlareau

+0

他のすべてが正しく動作しています。私の角バージョンを確認しました。また4.3.5です。あなたの完全な例を提供してください? – Multitut

関連する問題