从拦截器角度2/4(401处理)

时间:2018-01-11 05:45:34

标签: angular angular-http-interceptors

我正在使用Http拦截器并尝试重试失败的请求来处理401 error。我正在尝试设置一个新标头来更新请求,但它无效。

我注意到我的标头没有设置请求,而是转到lazyUpdates内部标头。任何人都可以告诉我为什么会发生这种情况。检查我的网络后,我发现通过重试请求传递了旧标头'x-auth-token'并且未发送新标头。

interceptor.ts

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        request = request.clone({
            setHeaders: {
                'x-auth-token': this.authService.getToken()
            }
        });

        return next.handle(request).do(event => {}, err => {
            if (err instanceof HttpErrorResponse && err.status == 401) {

                request = request.clone({
                    setHeaders: {
                        'Content-Type': 'application/json',
                        'Authorization': 'sample-auth'
                    }
                });

                return next.handle(request)
            }
        });
    }

包含延迟加载而不是标题的值的标头:

Here is the header that is being sent with the request

我已经完成了这个link

有什么想法吗?

我仍然遇到同样的问题。有人会建议我如何正确更新标题。

1 个答案:

答案 0 :(得分:0)

我认为问题在于克隆请求。您需要执行以下操作。

request = request.clone({
     headers: request.headers.set("Authorization", `sample-auth`)
});