2017-05-31 4 views
1

Ich verwende Angular2 und ionic 2s Frameworks-Speicher. Ich mache mehrere Aufrufe an meine API und vor ihnen rufe ich die Funktion auf, um das Token bei Bedarf zu aktualisieren.Token wird vor HTTP-Anforderung aktualisiert, aber neues Token wird nicht mit Anforderung gesendet

Ein Beispiel für das Problem: Ein Benutzer beginnt "AB" in der Suchleiste eingeben und das Token abläuft. Der Benutzer gibt jetzt "C" ein, wird aufgerufen, aber ein Token wird nicht mit der Anfrage gesendet, aber wenn ein Benutzer "D" drückt, nachdem ein Token bereitgestellt wurde, rate ich, dass ein Aufruf an die API nach dem Token erfolgt wird aus dem Speicher entfernt, aber vor seinem

get(): Promise<any> { 
    return this.storage.get('token_id').then(token_id => { 
    this.token_id = token_id; 
    }); 
} 

set(token_id) { 
    this.storage.set('token_id', token_id); 
} 

refresh(): Observable <any> { 

    let obs = Observable.fromPromise(this.get()) 
    .filter(() => this.jwtHelper.isTokenExpired(this.token_id)) 
    .flatMap(() => this.authHttp.get('http://api.app/api/refresh?token_id=' + this.token_id)); 
    obs.subscribe((response: Response) => { 
    this.token_id = response.json().token_id; 
    this.set(this.token_id); 
    }, (error: Response) => { 
    console.log(error); 
    }); 
    return obs; 
} 

Dienst, der den Anruf gespeichert werden, die refresh() ruft macht

search(key): Observable<any> { 

    this.userService.refresh(); 

    return this.authHttp.get('http://' + keyword) 
    .map(
     (response: Response) => { 
     return response.json(); 
     }, 
    (error: Error) => { 
     console.log(error); 
    } 
    ); 
} 

Komponente, die() suchen abonniert rufen

onSearch(event) 
{ 
    let key = event.target.value; 

    this.searchService.search(key) 
    .subscribe(
     (prods: SearchInterface[]) => this.prods = prods, 
     (error: Response) => { 
     } 
    ); 
} 
+0

Wenn die Suche api wird aufgerufen, wenn das Token abgelaufen ist, dann wird Server mit 401 oder 403 Fehlercode reagiert werden. Also, wenn Sie diesen Fehler auf Suche api Anruf nach dem Aufruf der Aktualisierung Token erhalten, rufen Sie einfach die gleiche Suche API erneut ... – SAJ

Antwort

0

Wenn die Anmeldung erfolgreich ist, müssen Sie das Token in localStorage speichern.

localStorage.setItem("token", this.token); 

Sie können mit Token erhalten

localStorage.getItem("token") 
+0

Es wird im Speicher als Antwort gespeichert – ghan

Verwandte Themen