Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

224
Vistas
NodeJS + Bcrypt compara el hash que devuelve verdadero con una cadena de comparación incorrecta

Actualmente estoy tratando de implementar un servicio de restablecimiento de contraseña con NodeJS usando Bcrypt. He creado un hash de un objeto como este:

 const userData = { dateNow, userId: foundUser.rows[0].user_id, passwordHash: foundUser.rows[0].user_password, email: foundUser.rows[0].user_email }; const userDataHash = await hashUserData(userData, 10);

Donde userDataHash es:

 const hashUserData = async (userData, saltRounds) => { let hashedData = await bcrypt.hash(JSON.stringify(userData), saltRounds); if (hashedData.includes('/') || hashedData.includes('.')) { hashedData = hashUserData(userData, saltRounds); } console.log('hashUserData', hashedData) return hashedData; };

La función hash es un poco complicada porque forma parte de la URL de restablecimiento. No quiero ningún hash con / o .

Luego, el hash del objeto de datos de usuario se agrega a una URL. Cuando el usuario hace clic en el enlace y se le lleva al restablecimiento de contraseña, cuando envía el formulario, el hash de la URL se envía junto con la ID de usuario de la cuenta para restablecer, esta ID se usa para crear un objeto de los mismos datos. utilizado originalmente para crear el hash, de modo que si el hash de la contraseña ya se ha cambiado, el hash no coincidirá, lo que impedirá que la persona actualice su contraseña.

Mi problema es que incluso cuando cambia el hash de la contraseña, la comparación de hash devuelve verdadero. Si cambio algo más en el objeto, la comparación hash devuelve falso.

 const compareHash = async (toCompare, currentHash) => { return await bcrypt.compare(toCompare, currentHash) };
 const userDataToCheck = { dateNow: req.params.dateNow, userId, passwordHash: foundUser.rows[0].user_password, email: foundUser.rows[0].user_email };
 const hashesMatch = await compareHash(JSON.stringify(userDataToCheck), req.params.userDataHash)

Donde req.params.userDataHash es el hash original que utiliza el hash de contraseña original en el objeto.

¡Cualquier ayuda apreciada!

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda