Заголовок перехватчика Angular 7 и повторный запрос - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь обработать заголовок ответа и в каком-то конкретном случае, когда токен обновления отправлен из бэкэнда, чтобы заменить старый токен в заголовке новым и отправить запрос снова.После нескольких часов исследований я не нашел решения, работающего на 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 голосов
/ 30 декабря 2018

Я нашел решение:

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