Вопросы по Nest.js

Объясните цель пакета @nestjs/jwt в NestJS?

Пакет @nestjs/jwt — это библиотека, разработанная для использования в рамках фреймворка NestJS, которая предоставляет удобные средства для работы с JSON Web Tokens (JWT). JWT является стандартом для передачи информации между двумя сторонами безопасным образом, и он широко используется для аутентификации и авторизации пользователей в веб-приложениях.

Основные цели использования @nestjs/jwt:

  1. Аутентификация пользователей: JWT обычно используется для подтверждения идентичности пользователя. После успешной аутентификации (обычно с помощью логина и пароля) сервер создает JWT и отправляет его клиенту. Клиент затем включает этот токен в заголовки своих последующих запросов.
  2. Авторизация доступа: JWT может содержать информацию о ролях и правах доступа пользователя, что позволяет серверу проверять, есть ли у пользователя разрешение на выполнение определенных действий.
  3. Безопасность: JWT подписываются с помощью секрета или открытого/закрытого ключа, что делает их трудными для подделки. Вы можете использовать алгоритмы шифрования, такие как HMAC или RSA.
  4. Статистика: JWT не требуют серверного хранения сессий, так как они представляют собой самодостаточные токены. Это облегчает масштабирование приложений.

Установка

Чтобы начать использование @nestjs/jwt, вам требуется установить его и зависимости. Вот как это сделать:

npm install @nestjs/jwt passport-jwt

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

Давайте рассмотрим простой пример использования @nestjs/jwt в NestJS для создания и проверки JWT.

  1. Создайте модуль аутентификации:
// auth.module.ts
import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';

@Module({
  imports: [
    JwtModule.register({
      secret: 'ваш_секретный_ключ', // Лучше хранить в .env файле
      signOptions: { expiresIn: '60s' }, // Время действия токена
    }),
  ],
  providers: [AuthService],
  controllers: [AuthController],
})
export class AuthModule {}
  1. Создайте сервис аутентификации:
// auth.service.ts
import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';

@Injectable()
export class AuthService {
  constructor(private readonly jwtService: JwtService) {}

  async login(user: any) {
    const payload = { username: user.username, sub: user.userId };
    return {
      access_token: this.jwtService.sign(payload), // Генерация токена
    };
  }
}
  1. Создайте контроллер аутентификации:
// auth.controller.ts
import { Controller, Post, Body } from '@nestjs/common';
import { AuthService } from './auth.service';

@Controller('auth')
export class AuthController {
  constructor(private readonly authService: AuthService) {}

  @Post('login')
  async login(@Body() user: any) {
    return this.authService.login(user);
  }
}
  1. Проверка токена: Вы можете создать отдельный Guards для проверки токена в запросах к защищенным маршрутам.
// jwt-auth.guard.ts
import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';

@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}

Таким образом, с использованием @nestjs/jwt, вы можете эффективно управлять аутентификацией и авторизацией пользователей в вашем приложении на NestJS. Это позволяет вам строить более безопасные и масштабируемые веб-приложения.

Содержание:
Редактировать