Angular2: Fehler 401 beim Aktualisieren des Tokens abgefangen

Ich bin neu in Angular2 und versuche, den Fehler 401 für die Tokenaktualisierung abzufangen, mit dem Plan, die ursprüngliche Anforderung erneut zu versuchen ...

Hier ist meine authService.refresh-Methode:

refresh() : Observable<any> {
    console.log("refreshing token");
    this.accessToken = null;
    let params : string = 'refresh_token=' + this.refreshToken + '&grant_type=refresh_token';
    let headers = new Headers();
    headers.append('Authorization', 'Basic ' + this.clientCredentials);
    headers.append('Content-Type', 'application/x-www-form-urlencoded');

    return Observable.create(
        observer => {
            this._http.post('http://localhost:8080/oauth/token', params, {
                    headers : headers
            })
            .map(res => res.json()).subscribe(
                (data) => {
                    this.accessToken = data.access_token;
                    observer.next(this.accessToken);
                    observer.complete();
                },
                (error) => {
                    Observable.throw(error);
                }
            );
        });
 }

und dann versuche ich, die Aktualisierungsfunktion in meiner Komponentenmethode zu verwenden:

update(index : number) {
 let headers = new Headers();
 headers.append('Authorization', 'Bearer ' + this._authService.accessToken);
 this._http.get('http://localhost:8080/rest/resource', {
    headers : headers
 })
 .catch(initialError =>{
    if (initialError && initialError.status === 401) {
       this._authService.refresh().flatMap((data) => {
         if ( this._authService.accessToken != null) {
             // retry with new token
             headers = new Headers();
             headers.append('Authorization', 'Bearer ' +  this._authService.accessToken);
             return this._http.get('http://localhost:8080/rest/resource', { headers : headers });
         } else {
         return Observable.throw(initialError);
         }
       });
    } else {
      return Observable.throw(initialError);
    }
 })
 .map(res => res.json())
 .subscribe(
    data => {
      this.resources[index] = data;
    },
    error => {
      console.log("error="+JSON.stringify(error));
    }
 ); 
}

Dies funktioniert aus irgendeinem Grund nicht ... Ich frage mich, was die korrekte Implementierung der Token-Aktualisierungsfunktion in angle2 ist.enter code here

Antworten auf die Frage(4)

Ihre Antwort auf die Frage