Angular 7拦截器更改标头并再次重试请求 [英] Angular 7 interceptor change header and retry request again

查看:58
本文介绍了Angular 7拦截器更改标头并再次重试请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to handle response header and in some particular case when refresh token has sent from backend to replace old token in header with new one and send request again. After hours and hours of research I didn't found any solution which works on Angular 7. I succeed to intercept request, but without success to replace token and send same request again.

我以这种方式这样做:

    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
                }
            })
        );
    }
}

感谢您的帮助.

推荐答案

我找到了解决方法:

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);
                    }
                }));
        }
    }

这篇关于Angular 7拦截器更改标头并再次重试请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆