2016-11-18 16 views
0

最下位レベルでは、要求を受け取り、認証ヘッダーを添付してサーバーを呼び出すAuthHttpServiceというサービスがあります。
各コンポーネントは、独自のデータサービスを持っているので、私はStudentComponentを持っていたならば、それは角2の401のカスタムAuth HTTPサービスでリダイレクトする方法

getStudents(): Observable<Student[]> { 
    return this._authHttpService.get('/Students') 
     .map((response: Response) => <Student[]> response.json()); 
} 

を呼ぶだろうStudentServiceが、そうコンポーネントで、Iは、(例えば)

this._studentService.getStudents().subscribe(data => { this.students = data}); 
を呼ぶだろうだろう

これはすごくうまく機能し、数ヶ月間続いています。 **しかし、今日は401の状態でグローバルリダイレクトを実装しようとしています**

AuthHttpServiceでこれを実装するにはどうすればよいですか? AuthHttpServiceで

は、私が

this.http.get(environment.apiUrl + '' + url, {headers: this.headers}).subscribe(r => { 
    if (r.status !== 401) { 
     return r; 
    } else { 
     this._router.navigateByUrl(loginUrl) 
    } 
    }); 

return this.http.get(url, {headers: this.headers})を交換しようとしたが、私はもはや、観察を返すてるので、今コンポーネントサービスで.mapは、障害が発生していないが、代わりに、私は実際の応答を返しますよ。

答えて

0

コンポーネントがsubscribe()メソッドで401を取得する場合、レスポンスオブジェクトには学生の配列が含まれません。それはのようなあなたのHTTP呼び出しのそれぞれについて、あなたのAuthHttpServiceに)あなたがしなければならないすべては(.catchである401にリダイレクトするには

this._studentService.getStudents().subscribe(data => { 
    if (Array.isArray(data)){ 
     this.students = data; 
    } else { 
     // check for the error and navigate to URL 
    } 

}); 
0

この答えに触発さ
get(url, params) { 
    const headers = new Headers(); 
    this.createAuthorizationHeader(headers); 
    return this.http.get(url, { 
     headers: headers, 
     search: params 
    }).catch(err => { 
     if (err.status === 401) { 
      this.router.navigate(['/login'); 
      return Observable.throw('Unauthorized'); 
     } 
    }); 
} 

:これを試してみてくださいhttps://stackoverflow.com/a/39878176/1742393

関連する問題