可以使用bcrypt的async比较方法来解决这个问题。代码示例如下:
const bcrypt = require('bcrypt'); const saltRounds = 10; const myPlaintextPassword = 'password';
//生成哈希密码 bcrypt.hash(myPlaintextPassword, saltRounds, function (err, hash) { // 使用哈希密码异步比较 bcrypt.compare(myPlaintextPassword, hash, function (err, result) { // result为true,字符串相同 console.log(result); }); });
使用comparesync比较相同的字符串总是返回false,这是由于comparesync是同步执行的。bcrypt的comparesync方法在比较之前会使用随机的盐值重新哈希给定的字符串,因此无法保证比较结果的一致性。因此,应该使用bcrypt的async方法来比较字符串,该方法是异步执行的,并且使用相同的盐值重复哈希任何给定的字符串。这样就可以确保比较的一致性,返回的结果也是正确的。