Опишите, как настроить и использовать Guards.

Guards в NestJS используются для управления доступом к маршрутам

Короткий ответ

Guards реализуют интерфейс CanActivate, который содержит метод canActivate. Этот метод возвращает true или false (или Promise/Observable), указывая, разрешен ли доступ к маршруту. Guards можно применять глобально, к отдельным контроллерам или маршрутам с помощью декоратора @UseGuards.

Длинный ответ

Основные аспекты работы Guards:

1. Guards определяются как классы, которые реализуют интерфейс CanActivate.

2. Метод canActivate получает объект ExecutionContext, который предоставляет доступ к объектам запроса и другим данным.

3. Guards возвращают:

- true/false для синхронной логики.

- Promise/Observable для асинхронных проверок (например, запросы в базу данных).

 

Пример использования Guards:

- Guard:

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Observable } from 'rxjs';

@Injectable()
class AuthGuard implements CanActivate {
  canActivate(
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    const request = context.switchToHttp().getRequest();
    return this.validateRequest(request);
  }

  validateRequest(request): boolean {
    // Добавьте вашу логику аутентификации
    return true; // true для разрешения, false для отказа
  }
}

- Применение Guard:

import { Controller, Get, UseGuards } from '@nestjs/common';

@Controller('cats')
class CatsController {
  @Get()
  @UseGuards(AuthGuard)
  findAll() {
    return 'This route is protected by AuthGuard';
  }
}

- Глобальное использование Guards:
Guards можно зарегистрировать глобально в корневом модуле:

import { APP_GUARD } from '@nestjs/core';

@Module({
  providers: [
    {
      provide: APP_GUARD,
      useClass: AuthGuard,
    },
  ],
})
export class AppModule {}


Guards предоставляют мощный инструмент для управления доступом в приложениях NestJS, особенно полезный для внедрения аутентификации и авторизации.

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Nest.js

Ключевые слова

Подпишись на Node.js Developer в телеграм