gpt4 book ai didi

node.js - 当将 Bcrypt 与 mongoose 一起使用时,comparePassword 方法中 this.password 未定义。怎么解决?

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:35 25 4
gpt4 key购买 nike

从 Mongo DB 获取记录后,调用comparePassword 方法来比较用户输入的密码和数据库中存储的密码。打印记录时,会显示所有数据,而在comparePassword 内部,this.password 未定义。

    User.findOne ({ username : req.body.username },
function(err, user) {
if (err) throw err;
console.log(user);
user.comparePassword(req.body.password, function(err, isMatch) {
if (err) throw err;
console.log('Password Match:', isMatch);
});});

方法:

    UserCredentialSchema.methods.comparePassword = function(pwd, cb) {
bcrypt.compare(pwd, this.password, function(err, isMatch) {
console.log(this.password);
if (err) return cb(err);
cb(null, isMatch);
});};

最佳答案

这有点老了,但我也遇到了同样的问题。花了半天时间,我找到了原因并且可能适用。

我的问题是由架构中使用 select: false 声明的密码字段引起的。请参阅下面的代码

var personSchema = new Schema({
first : {type: String, required: 'FirstNameInvalid'},
last : String,
email : {type: String, unique: true, lowercase: true, required: 'EmailInvalid'},
password : {type: String, select: false, required: 'PasswordInvalid'},
isLocked : Boolean,
isAdmin : Boolean
});

通过将密码声明更改为 select: true,甚至删除整个 select 语句,问题就得到了解决。

请注意,删除 select 语句会带来一些安全风险。但这超出了本主题的讨论范围

关于node.js - 当将 Bcrypt 与 mongoose 一起使用时,comparePassword 方法中 this.password 未定义。怎么解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45005191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com