Menu
CoddyTech

Guards

Parte da seção TypeScript e NestJS do Journey de Node.js da Coddy. Lição 14 de 17.

Qualquer pessoa pode criar ou excluir tarefas. Um guard decide se uma solicitação pode chegar ao seu manipulador: o Nest chama seu canActivate e, quando ele retorna false, o Nest responde com 403 Forbidden sem executar o método.

@Injectable()
export class OpenHoursGuard implements CanActivate {
    canActivate(context: ExecutionContext): boolean {
        const hour = new Date().getHours();
        return hour >= 9 && hour < 17;
    }
}

@Post()
@UseGuards(OpenHoursGuard)
book() {}

context.switchToHttp().getRequest() fornece a solicitação; o Node armazena os nomes dos cabeçalhos em letras minúsculas, então leia request.headers['x-api-key']. @UseGuards em um método protege esse método. Na classe do controlador, protege todos os métodos dela.

challenge icon

Desafio

Fácil
  • Conclua ApiKeyGuard: permita uma requisição somente quando o cabeçalho x-api-key for igual a process.env.API_KEY (esta lição define tasks-key-123).
  • Proteja POST /tasks e DELETE /tasks/:id; a leitura continua aberta.
  • Envie POST /tasks com um título: 403. Adicione o cabeçalho x-api-key: tasks-key-123 e envie novamente: 201. GET /tasks responde sem ele.

Experimente você mesmo

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

@Injectable()
export class ApiKeyGuard implements CanActivate {
    canActivate(context: ExecutionContext): boolean {
        // Permita a passagem da requisição somente quando o cabeçalho x-api-key dela
        // for igual a process.env.API_KEY.
        return true;
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de TypeScript e NestJS