Hola, estoy tratando de averiguar cómo implementar los nuevos interceptores angulares y manejar los 401 unauthorized
errores actualizando el token y volviendo a intentar la solicitud. Esta es la guía que he estado siguiendo: https://ryanchenkie.com/angular-authentication-using-the-http-client-and-http-interceptors
Estoy almacenando en caché con éxito las solicitudes fallidas y puedo actualizar el token, pero no puedo averiguar cómo reenviar las solicitudes que fallaron anteriormente. También quiero que esto funcione con los solucionadores que estoy usando actualmente.
token.interceptor.ts
return next.handle( request ).do(( event: HttpEvent<any> ) => {
if ( event instanceof HttpResponse ) {
// do stuff with response if you want
}
}, ( err: any ) => {
if ( err instanceof HttpErrorResponse ) {
if ( err.status === 401 ) {
console.log( err );
this.auth.collectFailedRequest( request );
this.auth.refreshToken().subscribe( resp => {
if ( !resp ) {
console.log( "Invalid" );
} else {
this.auth.retryFailedRequests();
}
} );
}
}
} );
authentication.service.ts
cachedRequests: Array<HttpRequest<any>> = [];
public collectFailedRequest ( request ): void {
this.cachedRequests.push( request );
}
public retryFailedRequests (): void {
// retry the requests. this method can
// be called after the token is refreshed
this.cachedRequests.forEach( request => {
request = request.clone( {
setHeaders: {
Accept: 'application/json',
'Content-Type': 'application/json',
Authorization: `Bearer ${ this.getToken() }`
}
} );
//??What to do here
} );
}
El archivo retryFailedRequests () anterior es lo que no puedo entender. ¿Cómo reenvío las solicitudes y las pongo a disposición de la ruta a través del solucionador después de volver a intentarlo?
Este es todo el código relevante si eso ayuda: https://gist.github.com/joshharms/00d8159900897dc5bed45757e30405f9