【发布时间】:2020-04-19 21:57:38
【问题描述】:
我正在尝试为失败的请求实施拦截器,以防令牌过期。我尝试了多种方法,但仍然没有成功。
我参考了下面的 URL 并阅读了多个博客。每个人都建议切换地图方法,但不与我合作。 Angular 4 Interceptor retry requests after token refresh
我尝试将所有请求收集到 cachedRequests: Array> = []; 但不知道如何使用它来重新触发失败的请求。
this.next.handle(request) 在成功刷新令牌后不召回。我可以看到更新后的请求对象。
有人可以指出在 Angular 7 中引用的位置
"rxjs": "~6.3.3", "rxjs-compat": "^6.5.2", 实现拦截器。
以下是为我工作但仅获得令牌响应的代码
``````````
handleError(request: HttpRequest<any>, next: HttpHandler, err) {
if (err instanceof HttpErrorResponse) {
if (err.status === 401) {
this.service.getNewToken().pipe(filter(token => token != null),
take(1),
switchMap((token: any) => {
console.log('token', token);
if (token && token.access_token && token.refresh_token) {
sessionStorage.setItem('accessToken', token.access_token);
sessionStorage.setItem('refreshToken', token.refresh_token);
}
request = this.addHeader(request);
request.headers.getAll('Authorization');
return next.handle(request);
})).subscribe(results => this.subject.next(results));
}
}
}
`````````
更新 2:在尝试了多种方法后,我发现了
- 返回 next.handle(request);
- 返回 next.handle(request).subscribe();
感谢指点
【问题讨论】:
标签: angular angular7 angular-http-interceptors