угловой перехватчик выйти из приложения, если есть ответ 401? - PullRequest
0 голосов
/ 28 февраля 2019

В моем перехватчике я хочу поставить канал в ответ и сделать выход из системы, если responseCode status равен 401, но проблема в том, что когда я помещаю catchError, наблюдаемое не имеет типа HttpEvent, а функция перехвата ожидает возврата этого типа?

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const authToken = `Agency ${this.auth.token}`;
    const requestWithHeaders = req.clone({ setHeaders: {'Content-Type': 'application/json'}});
    if (!!this.auth.token) {
        const authReq = requestWithHeaders.clone({ setHeaders: { Authorization: authToken} });
        return next.handle(authReq).pipe(
            catchError(er => {
                if (er.status === 401) {
                    this.auth.logout();
                }
                return er;
            })
        );
    } else {
        return next.handle(requestWithHeaders);
    }
}

}.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

вы можете обработать ваш Error ответ с помощью следующего подхода, попробуйте это

   return next.handle(clonedRequest).do((event: HttpEvent<any>) => {}, (error: any) => {
      if (error instanceof HttpErrorResponse) {
           if (error.status == 401 || error.status == 403) {
             this.auth.logout();
         }
      }
   });

Я надеюсь, что это решит вашу проблему:)

0 голосов
/ 28 февраля 2019

Выдает новую ошибку, которая будет переадресована вместо простого возврата ошибки:

import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators'

...

catchError(er => {
    if (er.status === 401) {
        this.auth.logout();
    }
    return throwError(er);
})
...