Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

331
Vistas
Aplique JWT Guard para un punto final, pero no lo aplique cuando tenga un parámetro de solicitud

¿Hay alguna forma de usar las condiciones if al aplicar @UseGuards(JwtAuthGuard) para un punto final en el controlador ?

 @UseGuards(JwtAuthGuard) @Get("/foo/:bar?") async get(@Param() param: RequestParamDto)

Tener un punto final /foo debería requerir un token de autorización JWT al llamarlo (lo que hace con el código anterior), pero cuando estamos pasando algo en un parámetro de solicitud, por ejemplo /foo/bar , debería desactivar una protección .

No veo una forma de aplicar condiciones if-else al aplicar Guards en un nivel de controlador.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede aplicar condiciones if-else en guardias. Sin embargo, no a nivel del controlador, pero puede lograr la condición deseada siguiendo los siguientes pasos:

En primer lugar, defina un nuevo decorador con el siguiente código:

 import { SetMetadata } from '@nestjs/common'; export const IS_PUBLIC_KEY = 'isPublic'; export const Public = () => SetMetadata(IS_PUBLIC_KEY, true);

Con este código, definirá un nuevo decorador con el nombre @Public() . Y vincule IS_PUBLIC_KEY al valor true que, a su vez, estará vinculado al decorador. El propósito de su existencia es permitir que el guardia identifique a qué rutas desea que todos accedan.

El siguiente paso sería agregar el decorador a la ruta deseada:

 @UseGuards(JwtAuthGuard) @Get("/foo/:bar") @Public() async get(@Param() param: RequestParamDto)

Finalmente, en la clase JwtAuthGuard deberías tener el siguiente código:

 @Injectable() export class JwtAuthGuard extends AuthGuard('jwt') { constructor(private reflector: Reflector) { super(); } canActivate(context: ExecutionContext) { const isPublic = this.reflector.getAllAndOverride<boolean>(IS_PUBLIC_KEY, [ context.getHandler(), context.getClass(), ]); if (isPublic) { return true; } return super.canActivate(context); } }

En el código dentro de la función canActivate, ahora está utilizando la propiedad reflector de NestJs para obtener la constante IS_PUBLIC_KEY agregada al decorador personalizado. Así, el vigilante podrá decirte cuándo quieres que la ruta sea pública para que todos puedan acceder.

Si desea obtener más información sobre este tema, consulte la documentación oficial aquí .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda