Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

329
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!