typescript - angular kesici 401 yanıtı varsa uygulamadan çıkış yapsın mı?


Interceptor'ımda yanıt üzerinde bir pipe koymak ve yanıtın statusCode'u 401 ise çıkış yapmak istiyorum ama sorun şu ki catchError koyduğumda observable HttpEvent türünde olmuyor ve intercept fonksiyonu bu türde bir dönüş bekliyor?

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

}.

Cevap #1

Sadece hatayı geri döndürmek yerine iletilecek yeni bir hata fırlatın:

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

...

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

Cevap #2

Aşağıdaki yaklaşımla Error cevabınızı yönetebilirsiniz, bunu deneyin

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

Umarım bu sorununuzu çözer :)