Estoy confundido con bcrypt, creo que necesitaría almacenar mi sal, y luego comparar mi contraseña de texto sin formato + sal con la contraseña con hash, sin embargo, de la documentación no parece que sea necesario almacenar la sal en absoluto . De hecho, utilicé este código para crear una contraseña salt y hash:
let salt = await bcrypt.genSalt(10);
const saltpasshash = await new Promise((resolve, reject) => {
bcrypt.hash(plain_text_password, salt, function(err, hash) {
if (err) reject(err)
resolve(hash)
});
})
//NOTE I SAVE saltpasshash as users pass and the salt in a separate field in the users table.
Esto funciona, lo que me confunde es que devolverá un resultado válido si lo comparo de la siguiente manera:
valid = await bcrypt.compare(plain_text_password, user.saltpasshash);
Estoy confundido en cuanto a por qué esto sería válido cuando no estoy proporcionando la sal, y si es así, ¿por qué almacenar la sal en absoluto?