Seamlessly Integrate Swagger with JWT Authentication in NestJS

Seamlessly Integrate Swagger with JWT Authentication in NestJS


Enhancing your NestJS API with robust documentation and JWT authentication is essential for a smooth developer experience. In this article, we’ll walk you through integrating Swagger UI into your NestJS application, utilizing dummy data, and customizing the UI with external assets.

Step 1: Install Required Packages

Start by installing the necessary packages for Swagger support:

npm install @nestjs/swagger

Step 2: Create Swagger Configuration

Create a file (swagger.config.ts), configure Swagger using the following code snippet with dummy data for demonstration:

import { INestApplication } from "@nestjs/common";
import {
  DocumentBuilder,
  SwaggerCustomOptions,
  SwaggerModule,
} from "@nestjs/swagger";

const documentConfig = new DocumentBuilder()
  .setTitle("Dummy API")  // API Title
  .setVersion("1.0.0")  // API Version
  .addBearerAuth(  // Adds JWT Bearer authentication
    {
      type: "http",
      scheme: "bearer",
      bearerFormat: "JWT",
      name: "Authorization",
      description: "Enter JWT token",
      in: "header",
    },
    "Bearer",
  )
  .addSecurityRequirements("Bearer")  // Security requirement
  .build();

const swaggerUiOptions: SwaggerCustomOptions = {
  swaggerOptions: {
    persistAuthorization: true,  // Retain authorization
  },
  customSiteTitle: "Dummy API Documentation",  // Swagger UI title
  customJs: [  // External JS files
    "https://unpkg.com/swagger-ui-dist@4.5.0/swagger-ui-bundle.js",
    "https://unpkg.com/swagger-ui-dist@4.5.0/swagger-ui-standalone-preset.js",
  ],
  customCssUrl: [  // External CSS files
    "https://unpkg.com/swagger-ui-dist@4.5.0/swagger-ui.css",
  ],
};

// Function to configure Swagger UI
export const configureSwaggerUI = (app: INestApplication<any>) => {
  const document = SwaggerModule.createDocument(app, documentConfig);  // Create Swagger document
  SwaggerModule.setup("swagger", app, document, swaggerUiOptions);  // Setup Swagger UI
};

Explanation

  • Document Configuration: Set up a Swagger document with a title, version, and authentication.
  • Swagger UI Options: Configure options, including a custom title and external assets.

Step 3: Integrate Swagger in Your NestJS Application

Add the Swagger configuration in your main.ts file:

import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
import { configureSwaggerUI } from "./swagger.config";  // Import Swagger configuration

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  configureSwaggerUI(app);  // Configure Swagger
  await app.listen(4000);  // Start the application
}

bootstrap();

Step 4: Run Your Application

Now, run your NestJS application:

npm run start

Step 5: Access Swagger UI

Open your browser and navigate to:

http://localhost:4000/swagger

You should see the Swagger UI with your Dummy API documentation!