Объясните цель пакета @nestjs/jwt в NestJS?
Пакет @nestjs/jwt
— это библиотека, разработанная для использования в рамках фреймворка NestJS, которая предоставляет удобные средства для работы с JSON Web Tokens (JWT). JWT является стандартом для передачи информации между двумя сторонами безопасным образом, и он широко используется для аутентификации и авторизации пользователей в веб-приложениях.
Основные цели использования @nestjs/jwt
:
- Аутентификация пользователей: JWT обычно используется для подтверждения идентичности пользователя. После успешной аутентификации (обычно с помощью логина и пароля) сервер создает JWT и отправляет его клиенту. Клиент затем включает этот токен в заголовки своих последующих запросов.
- Авторизация доступа: JWT может содержать информацию о ролях и правах доступа пользователя, что позволяет серверу проверять, есть ли у пользователя разрешение на выполнение определенных действий.
- Безопасность: JWT подписываются с помощью секрета или открытого/закрытого ключа, что делает их трудными для подделки. Вы можете использовать алгоритмы шифрования, такие как HMAC или RSA.
- Статистика: JWT не требуют серверного хранения сессий, так как они представляют собой самодостаточные токены. Это облегчает масштабирование приложений.
Установка
Чтобы начать использование @nestjs/jwt
, вам требуется установить его и зависимости. Вот как это сделать:
npm install @nestjs/jwt passport-jwt
Пример использования
Давайте рассмотрим простой пример использования @nestjs/jwt
в NestJS для создания и проверки JWT.
- Создайте модуль аутентификации:
// 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 {}
- Создайте сервис аутентификации:
// 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), // Генерация токена
};
}
}
- Создайте контроллер аутентификации:
// 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);
}
}
- Проверка токена: Вы можете создать отдельный 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. Это позволяет вам строить более безопасные и масштабируемые веб-приложения.