Saltar al contenido

En nest.js, ¿es posible obtener una instancia de servicio dentro de un decorador de parámetros?

Intenta comprender el código correctamente antes de adaptarlo a tu proyecto y si ttienes algo que aportar puedes comentarlo.

Solución:

No es posible inyectar un servicio en su decorador personalizado.

En su lugar, puede crear un AuthGuard que tiene acceso a su servicio. El guardia puede entonces agregar una propiedad al request objeto, al que luego puede acceder con su decorador personalizado:

@Injectable()
export class AuthGuard implements CanActivate 
  constructor(private authService: AuthService) 

  async canActivate(context: ExecutionContext): Promise 
    const request = context.switchToHttp().getRequest();
    const bearerToken = req.header.Authorization;
    const user = await this.authService.authenticate(bearerToken);
    request.principal = user;
    // If you want to allow the request even if auth fails, always return true
    return !!user;
  

import  createParamDecorator  from '@nestjs/common';

export const Principal = createParamDecorator((data: string, req) => 
  return req.principal;
);

y luego en su controlador:

@Get()
@UseGuards(AuthGuard)
get(@Principal() principal: Principal) 
  // ...


Tenga en cuenta que nest ofrece algunos módulos estándar para la autenticación, consulte los documentos.

Si eres capaz, tienes la opción de dejar un enunciado acerca de qué le añadirías a este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *