Что такое охранники (guards) в контексте NestJS?
Охранники (guards) в NestJS — это специальные компоненты, которые отвечают за авторизацию и аутентификацию в приложении. Они позволяют контролировать доступ к определенным маршрутам и ресурсам в вашем приложении, проверяя, имеет ли пользователь необходимые права или не является ли он авторизованным.
Зачем нужны охранники?
Как создавать охранников?
Охранники в NestJS реализуются как классы, которые имплементируют интерфейс CanActivate
. Давайте рассмотрим, как создать простой охранник.
Пример охранника
auth.guard.ts
в вашей директории guards
.import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest();
const user = request.user; // Получаем пользователя из запроса (предполагается, что он уже аутентифицирован)
// Проверяем, авторизован ли пользователь
return user ? true : false; // Если пользователь существует, доступ разрешен
}
}
import { Controller, Get, UseGuards } from '@nestjs/common';
import { AuthGuard } from './guards/auth.guard';
@Controller('profile')
export class ProfileController {
@Get()
@UseGuards(AuthGuard)
getProfile() {
return { message: 'Этот маршрут защищен!' };
}
}
Как работают охранники?
Когда клиент делает запрос к маршруту, защищенному охранником, NestJS вызывает метод canActivate()
охранника. Этот метод возвращает булево значение, которое указывает, можно ли продолжить выполнение запроса (true) или нет (false). Если метод canActivate()
возвращает false, NestJS завершает запрос и возвращает ответ с ошибкой.
Заключение
Охранники (guards) являются важной частью архитектуры приложений на NestJS, обеспечивая уровень безопасности и контроля доступа. Понимание того, как их создавать и использовать, поможет вам разрабатывать более безопасные и структурированные приложения.
Для более глубокого понимания и изучения вы также можете ознакомиться с официальной документацией NestJS.