小编nit*_*416的帖子

Angular-7-拦截器-令牌刷新后重试请求

我正在尝试为令牌过期时失败的请求实现拦截器。我尝试了多种方法但仍然没有成功。

我已经参考了下面的 URL 并阅读了多个博客。每个人都建议切换地图方法,但不与我合作。 Angular 4拦截器在令牌刷新后重试请求

我尝试将所有请求收集到cachedRequests中:Array> = []; 但不知道如何使用它来重新触发失败的请求。

成功刷新令牌后, this.next.handle(request) 不会被召回。不过我可以看到更新后的请求对象。

有人可以指出在角度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));

                }
            }
        }

`````````
Run Code Online (Sandbox Code Playgroud)

更新2:尝试多种方法后我发现

  1. 返回 next.handle(请求); <-- 这根本就没有被调用
  2. 返回 next.handle(request).subscribe(); <-- 这被调用但不更新对请求的组件的响应。 …

angular-http-interceptors angular angular7

1
推荐指数
1
解决办法
3545
查看次数