Angular 7拦截器更改标头并再次重试请求

时间:2018-12-30 16:35:44

标签: angular http-headers angular7 angular-http-interceptors

我正在尝试处理响应标头,在某些特定情况下,当刷新令牌已从后端发送来用新的标头替换标头中的旧令牌并再次发送请求时。经过数小时的研究,我没有找到任何适用于Angular 7的解决方案。我成功拦截了请求,但是替换令牌并再次发送相同的请求却没有成功。

我以这种方式这样做:

    export class RefreshTokenInterceptor implements HttpInterceptor {
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next.handle(req).pipe(
            tap(event => {

            },
            (error: any) => {
                if (error.status == 401 && error.error.token) {
                    // what to do here
                    // error.error.token is new generated token
                }
            })
        );
    }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我找到了解决方法:

export class RefreshTokenInterceptor implements HttpInterceptor {
        intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
            return next.handle(req).pipe(
                map((event: HttpEvent<any>) => {
                    return event;
                }),
                catchError((error: HttpErrorResponse) => {
                    if (error.status == 401 && error.error.token) {
                        localStorage.setItem('token', error.error.token);

                        req = req.clone({headers: req.headers.set('Authorization', 'Bearer ' + error.error.token)});
                        req = req.clone({headers: req.headers.set('Accept', 'application/json')});

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