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.