node.js - Bcrypt将密码结果与Nodejs中的未定义错误进行比较
问题描述
我正在使用护照设置简单登录,尝试将用户密码与保存的密码进行比较时发生错误
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' })
}
}
})
}
}
})
}));
当我console.log(user)
:
[ { _id: 5c5995448a88110c35673bb7,
firstname: 'test',
lastname: 'sample',
email: 'testsample@gmail.com',
password:
'$2b$10$bDVGjce/aDxr/NzXFw.qO.DA4tKjY6EwMARgl/NZfb0FNTaTxYwCW',
__v: 0 } ]
但是使用 bcrypt,user.password
结果是undefined
在尝试将保存的密码与表单的password
条目进行比较时,然而,似乎密码已从查询结果中收到,如console.log(user)
结果所示。
解决方案
由于 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' })
}
}
})
}
}
})
}));
或者你可以
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' })
}
}
})
}
}
})
}));
推荐阅读
- python - NoReverseMatch 在 /cars/
- c# - 如何处理 C# 中延迟的 CMD 提示?
- java - Dijkstra 的最短路径算法中的 ArrayIndexOutOfBoundsException
- node.js - 如何在以下条件下提供我的静态文件
- python - 在列表理解的迭代之后创建每个元素的列表
- javascript - 在按钮单击 AngularJS 上的元素之间切换
- php - PHP:我怎么知道是什么导致了 500 服务器错误?
- azure-devops - Azure DevOps 2020 - 如何选择为发布管道下载哪些工件 (18.170.30525.1 (Azure DevOps Server 2020))
- java - 在应用程序运行后,如何检查 application.properties 中某个属性的值以获取 springboot 应用程序?
- javascript - 将鼠标滚轮功能添加到灯箱