➕# Clase #6: Implementando hashing para usuarios 6/20 ➕
Continuando con el Proyecto: 📝
- Se va a realizar el hashing tanto para los usuarios (users) y clientes (customers), para ello vamos a VSC, buscamos la carpeta services, luego abrimos el archivo user.service.js, se modificará la función de crear usuario, se necesitará importar en la cabecera el bcrypt para la encriptación:
const bcrypt = require('bcrypt');
La función create(data) queda:
async create(data) {
//El password viene de data.password
const hash = await bcrypt.hash(data.password, 10);
const newUser = await models.User.create({
//Se clona todo el objeto con data
...data,
//Se asigna el password
password: hash
});
//Con el delete se elimina el password de la respuesta para no mostrar el password en pantalla
//Lo elimina de dataValues
delete newUser.dataValues.password;
return newUser;
}
- Guardamos, vamos a la terminal y en caso de que no se haya levantado docker ni pgAdmin, hacerlo con:
docker-compose up -d postgres
docker-compose up -d pgadmin
Luego correr con dev:
npm run dev
- Abrir Insomnia, e ir a la carpeta users, con la opción dev para la dirección de la API, vamos al POST de users y colocamos en el JSON:
{
"email": "admin @ mail. com",
"password": "12356 .2019",
"role": "admin"
}
Al enviar (Send) en la salida debe estar el código 201 Created con:
{
"createdAt": "2023-03-16T23:16:53.124Z",
"id": 1,
"email": "admin @ mail. com",
"role": "admin"
}
Nota: No sale el password impreso ya que se agregó el código el método delete para borrar en la respuesta el hash del password.
En cuanto a customer, dentro de la carpeta services la función create(data) queda:
async create(data) {
//Se crea el hash
const hash = await bcrypt.hash(data.user.password, 10);
//Se hace un clonación de data
const newData = {
...data,
//Se sobreescribe el sujeto user
user: {
...data.user,
//Se modifica el password
password: hash
}
}
const newCustomer = await models.Customer.create(newData, {
include: ['user']
});
delete newCustomer.dataValues.user.dataValues.password;
return newCustomer;
}
Nota: Tomar en cuenta que en éste caso tenemos anidado la creación de un customer.
- Guardamos, con la terminal corriendo:
npm run dev
- Vamos a Insomnia, ir a la carpeta customers, con la opción dev para la dirección de la API, vamos al POST de customers y colocamos en el JSON:
{
"name": "Santiago",
"lastName": "Molina",
"phone": "9898",
"user": {
"email": "santi @ mail.
com",
"password": "23 23 23"
}
}
Al enviar (Send) en la salida debe estar el código 201 Created con:
{
"createdAt": "2023-03-16T23:37:01.327Z",
"id": 1,
"name": "Santiago",
"lastName": "Molina",
"phone": "9898",
"user": {
"role": "customer",
"createdAt": "2023-03-16T23:37:01.328Z",
"id": 2,
"email": "santi @ mail. com"
},
"userId": 2
}
Nota: No sale el password impreso ya que se agregó el código el método delete para borrar en la respuesta el hash del password.