J'essaie d'automatiser les demandes de jeton de rafraîchissement lors de la réception d'une erreur 401 avec angular 7.
Entre cela, je ne trouve pas beaucoup de documentation sur la manière de le faire avec angular 7 et que je n'ai pas la connaissance préalable de angular ou rxjs je suis devenue une un peu fou
Je pense que c'est presque terminé, mais pour une raison quelconque, le second suivant.handle (Newreq) n'envoie pas la demande (dans Google chrome Network Lebugger seulement demande la première demande)
je gagne la réponse de rafraîchissement et de fabrication de processLoginResponse (RES) correctement
vous pouvez voir ici mon intercepteur
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let newReq = req.clone();
return next.handle(req).pipe(
catchError(error => {
if (error.status == 401) {
this._authenticationService.refresh().subscribe(
res => {
this._authenticationService.processLoginResponse(res);
newReq.headers.set("Authorization", "Bearer " + this._authenticationService.authResponse.token)
return next.handle(newReq)
},
error => {
this._authenticationService.logOut();
});
}
throw error;
})
);
Vous pouvez faire quelque chose comme ça:
import { HttpErrorResponse } from '@angular/common/http';
return next.handle(req).pipe(
catchError((err: any) => {
if (err instanceof HttpErrorResponse && err.status 401) {
return this._authenticationService.refresh()
.pipe(tap(
(success) => {},
(err) => {
this._authenticationService.logOut();
throw error;
}
).mergeMap((res) => {
this._authenticationService.processLoginResponse(res);
newReq.headers.set("Authorization", "Bearer " + this._authenticationService.authResponse.token)
return next.handle(newReq)
});
} else {
return Observable.of({});
}
}
));