Вы можете создать HttpInterceptor
, в котором вы можете проверить, является ли состояние 401, если да, то выйдите из системы пользователя и перенаправьте на страницу входа. HttpInterceptor
выполняет перехват каждого запроса и ответа и позволяет вам выполнить какое-то конкретное действие, например, проверить, вернул ли servce статус 401. Однако следует помнить, что range
для interceptor
работает как services
, поэтому, если вы включите его в модуль верхнего уровня, он будет перехватывать каждый запрос и ответ
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(
private authService: AuthService
) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(
map((event: HttpEvent<any>) => event), // pass further respone
catchError((error: HttpErrorResponse) => {
// here will be catched error from response, just check if its 401
if (error && error.status == 401)
// then logout e.g. this.authService.logout()
return throwError(error);
}));
}
}
А затем включите его в app.httpmodule
в разделе провайдеров
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi: true
},
]
Подробнее на angular.io docs или angular.io guide