안녕하세요 저는 새로운 각도 인터셉터를 구현 401 unauthorized
하고 토큰을 새로 고치고 요청을 다시 시도하여 오류를 처리하는 방법을 알아 내려고합니다 . 이것은 내가 따라온 가이드입니다 : https://ryanchenkie.com/angular-authentication-using-the-http-client-and-http-interceptors
실패한 요청을 성공적으로 캐싱하고 토큰을 새로 고칠 수 있지만 이전에 실패한 요청을 다시 보내는 방법을 알 수 없습니다. 또한 현재 사용중인 리졸버와 함께 작동하도록하고 싶습니다.
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
} );
}
위의 retryFailedRequests () 파일은 내가 알아낼 수없는 것입니다. 요청을 재전송하고 재시도 후 확인자를 통해 경로에서 사용 가능하게하려면 어떻게해야합니까?
이것이 도움이된다면 모든 관련 코드입니다 : https://gist.github.com/joshharms/00d8159900897dc5bed45757e30405f9