[英]Bcrypt comparing passwords results to undefined error in Nodejs
I am setting up a simple login with passport an error occurs while trying to compare user password with saved password 我正在使用护照设置简单的登录名,尝试将用户密码与保存的密码进行比较时发生错误
module.exports = function (passport) {
passport.use(new LocalStrategy(function (username, password, done) {
let query = { email: username };
User.find(query, function (err, user) {
if (err) {
console.log(err);
}
else {
if (!user) {
console.log(3)
return done(null, false, { message: 'No user found' })
} else {
bcrypt.compare(password, user.password, function (err, isMatch) {
if (err) {
console.log(err);
} else {
console.log(user.password)
if (isMatch) {
console.log(5)
return done(null, user);
} else {
console.log(6)
return done(null, false, { message: 'Wrong Password' })
}
}
})
}
}
})
}));
when I console.log(user)
: 当我console.log(user)
:
[ { _id: 5c5995448a88110c35673bb7,
firstname: 'test',
lastname: 'sample',
email: 'testsample@gmail.com',
password:
'$2b$10$bDVGjce/aDxr/NzXFw.qO.DA4tKjY6EwMARgl/NZfb0FNTaTxYwCW',
__v: 0 } ]
but using bcrypt, user.password
results to undefined
while trying to compare saved password with the form's password
entry, yet, seemingly the password has been received from the query results, as evident in console.log(user)
results. 但是,使用bcrypt时,试图将保存的密码与表单的password
条目进行比较时, user.password
结果为undefined
,但是,似乎已经从查询结果中接收到了密码,如console.log(user)
结果所示。
Since mongoDB is returning 'user' as an array with a single item you can either: 由于mongoDB会将“用户”作为具有单个项目的数组返回,因此您可以:
module.exports = function (passport) {
passport.use(new LocalStrategy(function (username, password, done) {
let query = { email: username };
User.find(query, function (err, user) {
if (err) {
console.log(err);
}
else {
if (!user) {
console.log(3)
return done(null, false, { message: 'No user found' })
} else {
bcrypt.compare(password, user[0].password, function (err, isMatch) {
if (err) {
console.log(err);
} else {
console.log(user[0].password)
if (isMatch) {
console.log(5)
return done(null, user);
} else {
console.log(6)
return done(null, false, { message: 'Wrong Password' })
}
}
})
}
}
})
}));
or you could 或者你可以
module.exports = function (passport) {
passport.use(new LocalStrategy(function (username, password, done) {
let query = { email: username };
User.find(query, function (err, user) {
if (err) {
console.log(err);
}
else {
if (!user) {
console.log(3)
return done(null, false, { message: 'No user found' })
} else {
let userdata = user[0];
bcrypt.compare(password, userdata.password, function (err, isMatch) {
if (err) {
console.log(err);
} else {
console.log(userdata.password)
if (isMatch) {
console.log(5)
return done(null, user);
} else {
console.log(6)
return done(null, false, { message: 'Wrong Password' })
}
}
})
}
}
})
}));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.