【问题标题】:Angular 7 interceptor change header and retry request againAngular 7拦截器更改标头并再次重试请求
【发布时间】:2019-05-27 12:18:11
【问题描述】:

我正在尝试处理响应标头,在某些特殊情况下,当刷新令牌已从后端发送以用新令牌替换标头中的旧令牌并再次发送请求时。经过数小时的研究,我没有找到任何适用于 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
                }
            })
        );
    }
}

感谢任何帮助。

【问题讨论】:

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


    【解决方案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);
                        }
                    }));
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 2015-02-01
      • 1970-01-01
      相关资源
      最近更新 更多