Как использовать авторизацию по API KEY в Swagger из GET запроса nestjs?

Для использования авторизации по API KEY в Swagger из GET запроса в Nest.js, вы можете использовать middleware для аутентификации запросов и проверки валидности API ключей. Ниже приведен пошаговый план, который поможет вам настроить авторизацию по API KEY в Swagger в Nest.js.

Шаг 1: Установите необходимые пакеты
Установите следующие пакеты при помощи npm:

npm install passport passport-http-bearer passport-http-bearer-strategy

Шаг 2: Создайте middleware для аутентификации
Создайте middleware для проверки валидности API ключей и проведения аутентификации запросов. Ниже приведен пример middleware:

//api-key.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response } from 'express';
import { HttpException } from '@nestjs/common/exceptions/http.exception';

@Injectable()
export class ApiKeyMiddleware implements NestMiddleware {
  private readonly apiKey = 'your-api-key';

  use(req: Request, res: Response, next: () => void) {
    const apiKey = req.header('x-api-key');
    if (!apiKey || apiKey !== this.apiKey) {
      throw new HttpException('Invalid API key', 401);
    }
    next();
  }
}

Шаг 3: Зарегистрируйте middleware в AppModule
Зарегистрируйте middleware в AppModule, чтобы он использовался во всех запросах. Ниже приведен пример регистрации middleware:

//app.module.ts
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ApiKeyMiddleware } from './api-key.middleware';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(ApiKeyMiddleware).forRoutes('*');
  }
}

Шаг 4: Создайте swagger decorator для API KEY
Создайте декоратор для добавления API KEY в Swagger UI. Ниже приведен пример декоратора:

//swagger.decorator.ts
import { applyDecorators, SetMetadata, UseGuards } from '@nestjs/common';
import { ApiBearerAuth } from '@nestjs/swagger';
import { AuthGuard } from '@nestjs/passport';

export function ApiKeyAuth() {
  return applyDecorators(
    SetMetadata('apiKey', true),
    ApiBearerAuth(),
    UseGuards(AuthGuard('bearer')),
  );
}

Шаг 5: Используйте декоратор в вашем контроллере
Примените созданный декоратор в вашем контроллере для защиты вызываемых методов. Ниже приведен пример использования декоратора в контроллере:

//app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { ApiKeyAuth } from './swagger.decorator';

@Controller('api')
@ApiKeyAuth()
export class AppController {
  @Get()
  getData(): string {
    return 'Hello World!';
  }
}

После завершения всех шагов, вы сможете использовать авторизацию по API KEY в Swagger из GET запроса в Nest.js.