Я играю с перехватчиком Angular, и я хотел перенаправить, если статус ответа 401
, а ниже - то, что я пробовал.
@Injectable()
export class AuthInterceptorService implements HttpInterceptor {
constructor(private _localStorageService: LocalStorageService, private _router: Router, private _location: Location) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (req.url.includes("/login")) {
return next.handle(req);
}
let authToken: LocalStorage = this._localStorageService.getItem('auth-token');
if (authToken) {
return next.handle(
req.clone({
headers: req.headers.append('Authorization', 'jwt ' + authToken.value)
})
).pipe(tap((response: HttpResponse<any>) => {
console.log(response);
if (response instanceof HttpResponse) {
if (response.body.status == 401) {
this._router.navigate([Routes.LOGIN]);
return response;
}
}
}));
}
this._router.navigate(['/login']);
}
}
Этот процесс работает, но всякий раз, когда маршрут изменяется, я получаю это в консоли chrome dev: ОШИБКА Вы указали undefined там, где ожидался поток. Вы можете указать Observable, Promise, Array или Iterable.
Как мне предотвратить это? а что я делаю не так?