Полное руководство: передача параметров в NestJS Guards

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

Метод 1: внедрение конструктора
Один из самых простых способов передачи параметров защите — внедрение конструктора. Вы можете определить параметр в конструкторе охранника и указать его значение при регистрации охранника в модуле.

@Injectable()
export class SampleGuard implements CanActivate {
  constructor(private readonly configService: ConfigService) {}
  canActivate(context: ExecutionContext): boolean {
    const apiKey = this.configService.get('API_KEY');
    // Your logic here
    return true;
  }
}

Метод 2: поставщики фабрик
Другой подход — использовать поставщиков фабрик. Этот метод позволяет вам создать фабричную функцию, которая возвращает экземпляр охранника. Вы можете внедрить зависимости в фабричную функцию и при необходимости передать дополнительные параметры.

export const SampleGuardFactory = (configService: ConfigService): SampleGuard => {
  const apiKey = configService.get('API_KEY');
  // Additional logic
  return new SampleGuard(apiKey);
};

Зарегистрируйте защиту с помощью поставщика фабрики:

@Module({
  providers: [
    {
      provide: SampleGuard,
      useFactory: SampleGuardFactory,
      inject: [ConfigService],
    },
  ],
})
export class AppModule {}

Метод 3: конфигурация на основе декоратора
NestJS предоставляет декоратор @UseGuards(), который принимает массив защитных элементов. Вы можете создать собственный декоратор, который обертывает декоратор @UseGuards()и передает параметры охраннику через декоратор.

export const SampleGuardDecorator = (param1: string, param2: number): CustomDecorator => {
  return applyDecorators(
    UseGuards(new SampleGuard(param1, param2)),
  );
};

Использование специального декоратора:

@SampleGuardDecorator('parameter1', 42)
@Controller('example')
export class ExampleController {}

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

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

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