listo auth

This commit is contained in:
lemuel 2022-10-22 12:29:40 -05:00
parent 85b9709ecb
commit 4417ac9fa1
2 changed files with 19 additions and 0 deletions

View File

@ -29,6 +29,7 @@ export class AuthService {
this.validacionBasica(admin, password); this.validacionBasica(admin, password);
this.validacionOperador(admin); this.validacionOperador(admin);
// Creo payload apartir de la interface que le corresponde a este tipo de usaurio
const JwtPayload: JwtPayloadAdmin = { const JwtPayload: JwtPayloadAdmin = {
Operador: { Operador: {
id_operador: admin.id_operador, id_operador: admin.id_operador,
@ -39,6 +40,7 @@ export class AuthService {
}, },
}; };
// "Firmo"/creo el token
return { token: this.jwtService.sign(JwtPayload) }; return { token: this.jwtService.sign(JwtPayload) };
}); });
} }
@ -52,6 +54,7 @@ export class AuthService {
this.validacionBasica(operador, password); this.validacionBasica(operador, password);
this.validacionOperador(operador); this.validacionOperador(operador);
// Creo payload apartir de la interface que le corresponde a este tipo de usaurio
const JwtPayload: JwtPayloadOperador = { const JwtPayload: JwtPayloadOperador = {
Operador: { Operador: {
id_operador: operador.id_operador, id_operador: operador.id_operador,
@ -66,6 +69,7 @@ export class AuthService {
}, },
}; };
// "Firmo"/creo el token
if (operador.tipoUsuario.id_tipo_usuario === 4) if (operador.tipoUsuario.id_tipo_usuario === 4)
JwtPayload.Modulo.id_modulo = modulo.id_modulo; JwtPayload.Modulo.id_modulo = modulo.id_modulo;
return { token: this.jwtService.sign(JwtPayload) }; return { token: this.jwtService.sign(JwtPayload) };
@ -76,10 +80,12 @@ export class AuthService {
return this.usuarioService return this.usuarioService
.findInfoUsuarioByUsuario(usuario) .findInfoUsuarioByUsuario(usuario)
.then((usuario) => { .then((usuario) => {
// Sin password = no registrado, valida que este registrado
if (usuario && !usuario.password) if (usuario && !usuario.password)
throw new BadRequestException('Este usuario no ha sido registrado.'); throw new BadRequestException('Este usuario no ha sido registrado.');
this.validacionBasica(usuario, password); this.validacionBasica(usuario, password);
// Creo payload apartir de la interface que le corresponde a este tipo de usaurio
const JwtPayload: JwtPayloadUsuario = { const JwtPayload: JwtPayloadUsuario = {
Usuario: { Usuario: {
id_usuario: usuario.id_usuario, id_usuario: usuario.id_usuario,
@ -91,6 +97,7 @@ export class AuthService {
}, },
}; };
// "Firmo"/creo el token
return { token: this.jwtService.sign(JwtPayload) }; return { token: this.jwtService.sign(JwtPayload) };
}); });
} }

View File

@ -21,27 +21,37 @@ export class JwtStrategyService extends PassportStrategy(Strategy) {
private usuarioService: UsuarioService, private usuarioService: UsuarioService,
) { ) {
super({ super({
// Configuración de JWT
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: configService.get<string>('AUTH_SECRETKEY'), secretOrKey: configService.get<string>('AUTH_SECRETKEY'),
}); });
} }
// Función que se ejecuta despues de aceptar un token valido
async validate( async validate(
// Payload del JWT que mandó el client
payload: JwtPayloadAdmin | JwtPayloadOperador | JwtPayloadUsuario, payload: JwtPayloadAdmin | JwtPayloadOperador | JwtPayloadUsuario,
) { ) {
const user: { modulo?: Modulo; usuario?: Usuario; operador?: Operador } = const user: { modulo?: Modulo; usuario?: Usuario; operador?: Operador } =
{}; {};
// Si el token contiene un objeto Usuario en el
if ('Usuario' in payload) if ('Usuario' in payload)
// Buscar a ese usuario en la db y lo asigna al objeto user
await this.usuarioService await this.usuarioService
.findInfoUsuarioById(payload.Usuario.id_usuario) .findInfoUsuarioById(payload.Usuario.id_usuario)
.then((usuario) => (user.usuario = usuario)); .then((usuario) => (user.usuario = usuario));
// Si el token contiene un objeto Operador en el
else if ('Operador' in payload) else if ('Operador' in payload)
// Buscar a ese operador en la db y lo asigna al objeto user
await this.operadorService await this.operadorService
.findInfoOperadorById(payload.Operador.id_operador) .findInfoOperadorById(payload.Operador.id_operador)
.then(async (operador) => { .then(async (operador) => {
// Valida que la cuena del operador este activa
if (!operador.activo) if (!operador.activo)
throw new ForbiddenException('Esta cuenta esta desactivada.'); 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 (operador.tipoUsuario.id_tipo_usuario === 4) {
if ('Modulo' in payload) if ('Modulo' in payload)
await this.moduloService await this.moduloService
@ -54,6 +64,8 @@ export class JwtStrategyService extends PassportStrategy(Strategy) {
} }
user.operador = operador; 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; return user;
} }
} }