68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
import { HttpException, Injectable } from '@nestjs/common';
|
|
import { JwtService } from '@nestjs/jwt';
|
|
import * as bcrypt from 'bcrypt';
|
|
import { hash } from 'bcrypt';
|
|
import { InjectRepository } from '@nestjs/typeorm';
|
|
import { Repository } from 'typeorm';
|
|
import { compare } from 'bcrypt';
|
|
import { jwtConstants } from './jwt.constants';
|
|
import { LoginMiembroDto } from './dto/loginMiembro.dto';
|
|
import { Miembro } from 'src/miembro/entity/miembro.entity';
|
|
import { RegistrarMiembroDto } from './dto/registrarMiembro.dto';
|
|
|
|
@Injectable()
|
|
export class AuthService {
|
|
constructor(
|
|
private jwtService: JwtService,
|
|
@InjectRepository(Miembro) private miembroRepository: Repository<Miembro>,
|
|
) {}
|
|
|
|
async registrar(registrarMiembro: RegistrarMiembroDto) {
|
|
const { email, password } = registrarMiembro;
|
|
|
|
if (await this.miembroRepository.findOne({ where: { email } })) {
|
|
throw new HttpException('El usuario ya existe', 403);
|
|
}
|
|
|
|
const plainToHash = await hash(password, 10);
|
|
|
|
registrarMiembro = { ...registrarMiembro, password: plainToHash };
|
|
|
|
return this.miembroRepository.save(
|
|
this.miembroRepository.create(registrarMiembro),
|
|
);
|
|
}
|
|
|
|
async login(loginMiembro: LoginMiembroDto) {
|
|
const { email, password } = loginMiembro;
|
|
|
|
const usuario = await this.miembroRepository.findOne({ where: { email } });
|
|
|
|
if (!usuario) throw new HttpException('Usuario no encontrado', 404);
|
|
|
|
const checkPassword = await compare(password, (await usuario).password);
|
|
|
|
if (!checkPassword) throw new HttpException('Contraseña incorrecta', 403);
|
|
|
|
const payload = {
|
|
id_usuario: usuario.id_miembro,
|
|
id_tipoMiembro: usuario.id_tipo_miembro,
|
|
name: usuario.nombre,
|
|
};
|
|
/* console.log(payload); */
|
|
const token = this.jwtService.sign(payload); //firma el token
|
|
/* console.log(token); */
|
|
|
|
const data = {
|
|
user: {
|
|
usuario: usuario.nombre,
|
|
id: usuario.id_miembro,
|
|
email: usuario.email,
|
|
},
|
|
token,
|
|
};
|
|
|
|
return data;
|
|
}
|
|
}
|