Xin chào, tôi đang cố gắng tìm ra cách triển khai các bộ chặn góc cạnh mới và xử lý 401 unauthorized
lỗi bằng cách làm mới mã thông báo và thử lại yêu cầu. Đây là hướng dẫn tôi đã làm theo: https://ryanchenkie.com/angular-authentication-using-the-http-client-and-http-interceptors
Tôi đang lưu trữ thành công các yêu cầu không thành công và có thể làm mới mã thông báo nhưng tôi không thể tìm ra cách gửi lại các yêu cầu không thành công trước đó. Tôi cũng muốn điều này hoạt động với các trình phân giải mà tôi hiện đang sử dụng.
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();
}
} );
}
}
} );
xác thực.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
} );
}
Tệp retryFailedRequests () ở trên là những gì tôi không thể tìm ra. Làm cách nào để gửi lại các yêu cầu và cung cấp chúng cho tuyến thông qua trình phân giải sau khi thử lại?
Đây là tất cả mã có liên quan nếu điều đó hữu ích: https://gist.github.com/joshharms/00d8159900897dc5bed45757e30405f9