al recibir token crea usuario o operador con su modulo desde el inicio

This commit is contained in:
xXpuma99Xx 2022-07-31 21:13:34 -05:00
parent c739dc1595
commit fc73590ba9
3 changed files with 57 additions and 7 deletions

View File

@ -45,11 +45,11 @@ export class AuthService {
.then((operador) => {
this.validarLogin(operador, password);
if (
operador.institucion.id_institucion !==
operador.institucion.id_institucion !=
modulo.institucion.id_institucion
)
throw new ConflictException(
'Este módulo no pertenece a tu institución, selecciona uno válido.',
'Este módulo no pertenece a tu institución, selecciona una que si.',
);
const payload: JwtPayload = {
@ -83,7 +83,7 @@ export class AuthService {
!this.bcryptService.comparar(password, usuarioOperador.password)
)
throw new UnauthorizedException(
'Usuario y/o password incorrectos, trata de nuevo.',
'Usuario y/o password incorrectos, ingresa unas credenciales válidas.',
);
}
}

View File

@ -1,19 +1,54 @@
import { Injectable } from '@nestjs/common';
import { ConflictException, Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { PassportStrategy } from '@nestjs/passport';
import { Strategy, ExtractJwt } from 'passport-jwt';
import { ModuloService } from 'src/modulo/modulo.service';
import { Operador } from 'src/operador/entity/operador.entity';
import { OperadorService } from 'src/operador/operador.service';
import { Usuario } from 'src/usuario/entity/usuario.entity';
import { UsuarioService } from 'src/usuario/usuario.service';
import { Modulo } from '../../modulo/entity/modulo.entity';
import { JwtPayload } from '../dto/jwt-payload';
@Injectable()
export class JwtStrategyService extends PassportStrategy(Strategy) {
constructor(private configService: ConfigService) {
constructor(
private configService: ConfigService,
private moduloService: ModuloService,
private operadorService: OperadorService,
private usuarioService: UsuarioService,
) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: configService.get<string>('AUTH_SECRETKEY'),
});
}
validate(payload: JwtPayload) {
return payload;
async validate(payload: JwtPayload) {
const user: { modulo?: Modulo; usuario?: Usuario; operador?: Operador } =
{};
if (payload.id_usuario)
await this.usuarioService
.findById(payload.id_usuario, true, true)
.then((usuario) => (user.usuario = usuario));
else if (payload.id_operador)
await this.operadorService
.findById(payload.id_operador)
.then(async (operador) => {
user.operador = operador;
if (operador.tipoUsuario.id_tipo_usuario === 4) {
if (payload.id_modulo)
await this.moduloService
.findById(payload.id_modulo)
.then((modulo) => (user.modulo = modulo));
else
throw new ConflictException(
'Credenciales no válidas, inicia sesión de nuevo.',
);
}
});
return user;
}
}

View File

@ -131,6 +131,21 @@ export class UsuarioController {
return this.usuarioService.passwordReset(body.id_usuario);
}
@Put('update-password')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Enpoint que desactiva todas las cuentas de usuarios de una institución.',
})
@ApiBearerAuth('jwt')
@ApiBody({
description: 'Es obligatorio enviar el campo id_usuario.',
examples: { ejemplo: { value: { id_institucion: 200 } } },
})
desactivarCuentas(@Body() body: UpdateUsuarioInputDto) {
return this.usuarioService.passwordReset(body.id_usuario);
}
@Serealize(UsuarioOutputDto)
@Get('usuario')
@UseGuards(AuthGuard('jwt'))