este problema se puede solucionar de variadas formas, pero te damos la que en nuestra opinión es la resolución más completa.
Solución:
Para inyectar servicio en guardia. Puede crear un módulo global.
// ApiModule
import Module,Global from '@nestjs/common';
import KeyService from '../';
@Global()
@Module(
providers: [ KeyService ],
exports: [KeyService]
)
export class ApiModule
Luego inyecta servicio en guardia como este
// guard
export class ApiGuard implements CanActivate
constructor(@Inject('KeyService') private readonly KeyService)
async canActivate(context: ExecutionContext)
// your code
throw new ForbiddenException();
Ahora el problema se puede resolver. Pero tengo otro problema. Quiero inyectar algo en el servicio pero recibí este error:
Nest no puede resolver las dependencias de AuthGuard (?, +). Por favor, asegúrese de que el argumento en el índice [0] está disponible en el contexto actual.
Y aquí está mi solución:
Para inyectar otra dependencia en KeyService, como dicen los documentos de nestjs.
Los guardias globales registrados desde fuera de cualquier módulo (con useGlobalGuards() como en el ejemplo anterior) no pueden inyectar dependencias ya que esto se hace fuera del contexto de cualquier módulo.
Esta es su muestra:
// app.module.js
import Module from '@nestjs/common';
import APP_GUARD from '@nestjs/core';
@Module(
providers: [
provide: APP_GUARD,
useClass: RolesGuard,
,
],
)
export class ApplicationModule
Funcionó. Ahora puedo usar guard global sin error de dependencia.
Tal vez sea demasiado tarde, pero encontré el mismo problema y encontré una solución. Tal vez hay uno mejor, pero está funcionando correctamente para mí:
Defina KeysModule como un módulo global, puede verificar cómo hacerlo en los documentos de nestjs: https://docs.nestjs.com/modules
Después puedes hacer esto:
import CanActivate, ExecutionContext, Injectable from '@nestjs/common';
@Injectable()
export class ApiGuard implements CanActivate
constructor(
@Inject('KeyService')
private readonly ks
)
const key = await this.ks.findKey();
"YOUR_CODE_HERE..."
Espero que sea de ayuda para ti o para alguien que se quede con esto en el futuro.
Aquí tienes las reseñas y calificaciones
Si entiendes que te ha sido de utilidad nuestro post, nos gustaría que lo compartas con otros desarrolladores y nos ayudes a difundir nuestro contenido.