diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 33a9877..4632db0 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -29,6 +29,7 @@ export class AuthService { this.validacionBasica(admin, password); this.validacionOperador(admin); + // Creo payload apartir de la interface que le corresponde a este tipo de usaurio const JwtPayload: JwtPayloadAdmin = { Operador: { id_operador: admin.id_operador, @@ -39,6 +40,7 @@ export class AuthService { }, }; + // "Firmo"/creo el token return { token: this.jwtService.sign(JwtPayload) }; }); } @@ -52,6 +54,7 @@ export class AuthService { this.validacionBasica(operador, password); this.validacionOperador(operador); + // Creo payload apartir de la interface que le corresponde a este tipo de usaurio const JwtPayload: JwtPayloadOperador = { Operador: { id_operador: operador.id_operador, @@ -66,6 +69,7 @@ export class AuthService { }, }; + // "Firmo"/creo el token if (operador.tipoUsuario.id_tipo_usuario === 4) JwtPayload.Modulo.id_modulo = modulo.id_modulo; return { token: this.jwtService.sign(JwtPayload) }; @@ -76,10 +80,12 @@ export class AuthService { return this.usuarioService .findInfoUsuarioByUsuario(usuario) .then((usuario) => { + // Sin password = no registrado, valida que este registrado if (usuario && !usuario.password) throw new BadRequestException('Este usuario no ha sido registrado.'); this.validacionBasica(usuario, password); + // Creo payload apartir de la interface que le corresponde a este tipo de usaurio const JwtPayload: JwtPayloadUsuario = { Usuario: { id_usuario: usuario.id_usuario, @@ -91,6 +97,7 @@ export class AuthService { }, }; + // "Firmo"/creo el token return { token: this.jwtService.sign(JwtPayload) }; }); } diff --git a/src/auth/strategy/jwt-strategy.service.ts b/src/auth/strategy/jwt-strategy.service.ts index ecac23b..3b9ab6f 100644 --- a/src/auth/strategy/jwt-strategy.service.ts +++ b/src/auth/strategy/jwt-strategy.service.ts @@ -21,27 +21,37 @@ export class JwtStrategyService extends PassportStrategy(Strategy) { private usuarioService: UsuarioService, ) { super({ + // Configuración de JWT jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), secretOrKey: configService.get('AUTH_SECRETKEY'), }); } + // Función que se ejecuta despues de aceptar un token valido async validate( + // Payload del JWT que mandó el client payload: JwtPayloadAdmin | JwtPayloadOperador | JwtPayloadUsuario, ) { const user: { modulo?: Modulo; usuario?: Usuario; operador?: Operador } = {}; + // Si el token contiene un objeto Usuario en el if ('Usuario' in payload) + // Buscar a ese usuario en la db y lo asigna al objeto user await this.usuarioService .findInfoUsuarioById(payload.Usuario.id_usuario) .then((usuario) => (user.usuario = usuario)); + // Si el token contiene un objeto Operador en el else if ('Operador' in payload) + // Buscar a ese operador en la db y lo asigna al objeto user await this.operadorService .findInfoOperadorById(payload.Operador.id_operador) .then(async (operador) => { + // Valida que la cuena del operador este activa if (!operador.activo) throw new ForbiddenException('Esta cuenta esta desactivada.'); + // Validar que venga en el payload venga con un objeto Modulo en + // caso de ser tipo usuario operador y asignarlo al objeto user if (operador.tipoUsuario.id_tipo_usuario === 4) { if ('Modulo' in payload) await this.moduloService @@ -54,6 +64,8 @@ export class JwtStrategyService extends PassportStrategy(Strategy) { } user.operador = operador; }); + // Este objeto retornado se encuentra en el objeto request + // (El ojbeto que recibe toda la información de la petición) return user; } }