Hallo, ich versuche herauszufinden, wie die neuen Winkelabfangjäger implementiert und 401 unauthorized
Fehler behandelt werden, indem das Token aktualisiert und die Anforderung erneut versucht wird. Dies ist der Leitfaden, dem ich gefolgt bin: https://ryanchenkie.com/angular-authentication-using-the-http-client-and-http-interceptors
Ich kann die fehlgeschlagenen Anforderungen erfolgreich zwischenspeichern und kann das Token aktualisieren, aber ich kann nicht herausfinden, wie die zuvor fehlgeschlagenen Anforderungen erneut gesendet werden. Ich möchte auch, dass dies mit den Resolvern funktioniert, die ich derzeit verwende.
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
} );
}
Die obige Datei retryFailedRequests () kann ich nicht herausfinden. Wie sende ich die Anforderungen erneut und stelle sie nach dem erneuten Versuch der Route durch den Resolver zur Verfügung?
Dies ist der gesamte relevante Code, wenn dies hilfreich ist: https://gist.github.com/joshharms/00d8159900897dc5bed45757e30405f9