Estoy tratando de comparar dos contraseñas, una de DB y otra ingresada por el usuario. El de db se codifica y se almacena en formato binario. Así que tengo que convertirlo en cadena antes de comparar.
console.log( user.PasswordHash.toString('base64') === '$2a$10$UZptbo5h4lQFYmK352CPf.jDvPZh1pm3uC3Nb0wEVjF/RUCw2OU2G' ); //false Cuando miro en la consola user.PasswordHash.toString('base64') se evalúa como $2a$10$UZptbo5h4lQFYmK352CPf.jDvPZh1pm3uC3Nb0wEVjF/RUCw2OU2G que es el mismo valor.
¿Lo que está sucediendo?
bcrypt.compareSync( password, user.PasswordHash.toString('base64')); //falseCualquier ayuda es apreciada.
El problema no está en el código que está compartiendo... Está en otra parte... Mi tesis es que tiene un problema asíncrono, lo que significa que los datos se entregan después de que se ejecuta el código. En ese caso, la variable no está definida y la declaración condicional devolverá falso como en el siguiente ejemplo:
let x; function isOne(input){ return input === 1; } console.log(isOne(x))Intente implementar una promesa https://www.w3schools.com/js/js_promise.asp
Para ver si es un problema asíncrono, puede usar setTimeout()
Asegúrese de tener los datos y luego ejecute su declaración de condición. Ve paso a paso comprobando con console.log()