为什么我从 bcrypt 比较中得到 isMatch null,即使两个密码字符串完全匹配?
Why am I getting isMatch null from bcrypt compare even though two password string matches perfectly?
我正在尝试根据密码对用户进行身份验证。我正在使用 bcrypt compare 来比较用户请求的密码和 mongodb 中的一个密码,但即使两个密码完全匹配我得到空值,这是我正在尝试的代码
userSchema.methods.comparePassword = function (passw, cb) {
var user = this;
console.log((passw === user.password) ? 'passwords match' : 'passwords dont match' );
bcrypt.compare(passw, user.password, function (err, isMatch) {
console.log(passw +" "+ user.password +" " +isMatch )
if(err) {
return cb(err)
}
cb(null, isMatch)
})
}
我得到控制台输出如下
sh37xb sh37xb null
这是用户输入的密码,该用户在数据库中的密码,以及匹配值
这是 null 相反它必须是相反的,因为两个密码完全匹配。
当我用三元条件检查这个密码时,它说 'passwords match' 而不是 bcrypt.compare。我究竟做错了什么?谁能帮我指出我的错误??
bcrypt.compare
的第二个参数应该是 散列 而不是纯文本字符串。
Bcrypt 比较不会将明文密码与另一个明文密码进行比较。它计算纯文本密码的哈希值,并将其与您作为第二个参数提供的早期哈希值进行比较
查看哈希值是否匹配。
使用 bcrypt 比较的典型原因是它比字符串比较更安全。为此,密码数据库需要包含散列密码,而不是纯文本密码。纯文本密码数据库很容易被窃取。散列字符串数据库用处不大。
npm page for bcrypt给出了这个例子:
To check a password:
// Load hash from your password DB.
bcrypt.compare(myPlaintextPassword, hash, function(err, result) {
// result == true
});
bcrypt.compare(someOtherPlaintextPassword, hash, function(err, result) {
// result == false
});
当用户注册时,您保存它的散列版本而不是实际文本。
const password = req.body.password
// This hasedPassword will be saved to database
const salt = await bcrypt.genSalt(10)
const hashedPassword = await bcrypt.hash(password, salt)
当用户尝试登录时,bcrypt 将用户输入的密码与散列密码进行比较
const saveHashedPassword = user.password
const enteredPassword = passw
bcrypt.compare(enteredPassword, saveHashedPassword, function(err, result) {
// Do your logic
if(err) {
return cb(err)
}
cb(null, isMatch)
})
我正在尝试根据密码对用户进行身份验证。我正在使用 bcrypt compare 来比较用户请求的密码和 mongodb 中的一个密码,但即使两个密码完全匹配我得到空值,这是我正在尝试的代码
userSchema.methods.comparePassword = function (passw, cb) {
var user = this;
console.log((passw === user.password) ? 'passwords match' : 'passwords dont match' );
bcrypt.compare(passw, user.password, function (err, isMatch) {
console.log(passw +" "+ user.password +" " +isMatch )
if(err) {
return cb(err)
}
cb(null, isMatch)
})
}
我得到控制台输出如下
sh37xb sh37xb null
这是用户输入的密码,该用户在数据库中的密码,以及匹配值 这是 null 相反它必须是相反的,因为两个密码完全匹配。 当我用三元条件检查这个密码时,它说 'passwords match' 而不是 bcrypt.compare。我究竟做错了什么?谁能帮我指出我的错误??
bcrypt.compare
的第二个参数应该是 散列 而不是纯文本字符串。
Bcrypt 比较不会将明文密码与另一个明文密码进行比较。它计算纯文本密码的哈希值,并将其与您作为第二个参数提供的早期哈希值进行比较 查看哈希值是否匹配。
使用 bcrypt 比较的典型原因是它比字符串比较更安全。为此,密码数据库需要包含散列密码,而不是纯文本密码。纯文本密码数据库很容易被窃取。散列字符串数据库用处不大。
npm page for bcrypt给出了这个例子:
To check a password:
// Load hash from your password DB.
bcrypt.compare(myPlaintextPassword, hash, function(err, result) {
// result == true
});
bcrypt.compare(someOtherPlaintextPassword, hash, function(err, result) {
// result == false
});
当用户注册时,您保存它的散列版本而不是实际文本。
const password = req.body.password
// This hasedPassword will be saved to database
const salt = await bcrypt.genSalt(10)
const hashedPassword = await bcrypt.hash(password, salt)
当用户尝试登录时,bcrypt 将用户输入的密码与散列密码进行比较
const saveHashedPassword = user.password
const enteredPassword = passw
bcrypt.compare(enteredPassword, saveHashedPassword, function(err, result) {
// Do your logic
if(err) {
return cb(err)
}
cb(null, isMatch)
})