Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Nest.js: canactivate, guard, useguards

Опишите, как настроить и использовать Guards.

Guards в NestJS используются для управления доступом к маршрутам

Короткий ответ

Guards реализуют интерфейс CanActivate, который содержит метод canActivate. Этот метод возвращает true или false (или Promise/Observable), указывая, разрешен ли доступ к маршруту. Guards можно применять глобально, к отдельным контроллерам или маршрутам с помощью декоратора @UseGuards.

Длинный ответ

Основные аспекты работы Guards:

1. Guards определяются как классы, которые реализуют интерфейс CanActivate.

2. Метод canActivate получает объект ExecutionContext, который предоставляет доступ к объектам запроса и другим данным.

3. Guards возвращают:

  • true/false для синхронной логики.

  • Promise/Observable для асинхронных проверок (например, запросы в базу данных).

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

Guard:

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Observable } from 'rxjs';

@Injectable()
class AuthGuard implements CanActivate {
  	canActivate(
    		context: ExecutionContext,
  	): boolean | Promise<boolean> | Observable<boolean> {
    		const request = context.switchToHttp().getRequest();
    		return this.validateRequest(request);
  	}

  	validateRequest(request): boolean {
    		// Добавьте вашу логику аутентификации
    		return true; // true для разрешения, false для отказа
  	}
}

Применение Guard:

import { Controller, Get, UseGuards } from '@nestjs/common';

@Controller('cats')
class CatsController {
  	@Get()
  	@UseGuards(AuthGuard)
  	findAll() {
    		return 'This route is protected by AuthGuard';
  	}
}

Глобальное использование Guards:
Guards можно зарегистрировать глобально в корневом модуле:

import { APP_GUARD } from '@nestjs/core';

@Module({
  	providers: [
    		{
      			provide: APP_GUARD,
      			useClass: AuthGuard,
    		},
  	],
})
export class AppModule {}

Guards предоставляют мощный инструмент для управления доступом в приложениях NestJS, особенно полезный для внедрения аутентификации и авторизации.

  • Аватар

    Node.js Guru

    Demetra

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Nest.js

    Nest.js

Ключевые слова

#canactivate

#guard

#useguards

Подпишись на Node.js Developer в телеграм

  • Аватар

    Node.js Guru

    Demetra

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.