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) => {
}
);
}
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