Обработка ошибок 401 и 403 с помощью Angular HTTP Interceptor: упрощенное руководство

В этой статье блога мы рассмотрим, как обрабатывать ошибки 401 и 403 в Angular с помощью перехватчика HTTP. Мы предоставим вам простые и практичные примеры кода для реализации перехватчика и запуска выхода из системы при возникновении этих ошибок. Итак, приступим!

Понимание HTTP-перехватчика.
Прежде чем мы перейдем к реализации, давайте быстро разберемся, что такое HTTP-перехватчик. В Angular перехватчик позволяет перехватывать HTTP-запросы и ответы, позволяя изменять их до того, как они будут отправлены или получены приложением. Эта мощная функция позволяет нам обрабатывать ошибки глобально и выполнять общие задачи, например выход пользователя из системы в случае сбоя аутентификации.

Реализация HTTP-перехватчика:
Для начала создадим новый файл с именем auth-interceptor.ts(вы можете дать ему любое имя) и импортируем необходимые модули:

import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';

Далее создайте класс и реализуйте интерфейс HttpInterceptor:

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // Your code implementation goes here
  }
}

Теперь с помощью метода interceptмы можем обрабатывать ошибки 401 и 403. Давайте рассмотрим несколько подходов:

Подход 1. Перенаправление на страницу выхода:

import { Router } from '@angular/router';
constructor(private router: Router) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  return next.handle(request).pipe(
    catchError((error) => {
      if (error.status === 401 || error.status === 403) {
        this.router.navigate(['/logout']);
      }
      throw error;
    })
  );
}

В этом подходе мы используем модуль Angular Routerдля перехода на страницу выхода при возникновении ошибки 401 или 403. Убедитесь, что у вас есть LogoutComponentи что он правильно настроен в вашем модуле маршрутизации.

Подход 2. Очистка локального хранилища и перенаправление:

import { AuthService } from './auth.service';
constructor(private authService: AuthService) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  return next.handle(request).pipe(
    catchError((error) => {
      if (error.status === 401 || error.status === 403) {
        this.authService.logout();
      }
      throw error;
    })
  );
}

В этом подходе мы предполагаем, что у вас есть AuthServiceс методом logout, который удаляет данные аутентификации пользователя, такие как его токен доступа, из локального хранилища. Это фактически приведет к выходу пользователя из системы.

В этой статье мы рассмотрели, как обрабатывать ошибки 401 и 403 в Angular с помощью перехватчика HTTP. Мы предоставили два практических подхода: перенаправление на страницу выхода и очистку данных аутентификации пользователя. Реализуя эти методы, вы можете обеспечить удобство работы с пользователем и повысить безопасность вашего приложения Angular.

Помните, что обработка ошибок — это важная часть любого приложения, а использование перехватчика HTTP — это мощный инструмент для централизации логики обработки ошибок. С помощью этих методов вы можете легко обрабатывать ошибки аутентификации и улучшать общее взаимодействие с пользователем.