【发布时间】:2022-10-23 02:15:54
【问题描述】:
我正在尝试实现登录方法,通过他/她的email 灼烧用户,然后检查password 验证。
所以,如果电子邮件无效,然后抛出无效的电子邮件响应和密码,我也在做同样的事情,但是当我比较 candidatePassword 和用户存储的密码时,bycrpt.compare 给了我一个错误。我也检查了数据库(MongoDB) 的密码,它也尝试将密码和hashedPassword 打印到控制台以查看我正在获取数据并打印它是正确的。因此,得出的结论是bcrypt.compare 方法存在一些错误。
如果我散列错误或我检查密码的方法错误,你们能帮我吗?
任何帮助表示赞赏。
用户模型:
userSchema.methods.correctPassword = async (candidatePassword, userPassword) => {
console.log(candidatePassword, "user=>", userPassword)
return await bcrypt.compare(candidatePassword, userPassword);
};
export const user = mongoose.model('user', userSchema);
登录文件:
export const loginUser = async (req, res, next) => {
try {
const { email, passcode } = req.body;
// 1) Check if email and password is empty
if (!email || !passcode)
return res.status(400).send('Please provide email and password!');
// 2) Check if user exists && password is correct
const user = await UserModule.findOne({ email }).select('+passcode');
console.log("user=>", passcode, "\n", "hashed=>", user.passcode, "\n", await user.correctPassword(passcode, user.passcode))
if (!user || !(await user.correctPassword(passcode, user.passcode)))
return res.send("Email or Password is invalid.")
res.send(message: "Logged in Successfully");
}
catch (err) {
res.send(err.message)
}
}
输出
user=> vandor1passcode
hashed=> $2b$12$LdpTufKRc2qXiWh2YOfNUO9f4QnNI/jfT4Hq9/.GJ2O7cTWjFugoy
false
【问题讨论】:
-
检查
passcode请求中的任何额外空格。 -
是的,我检查并没有,没有额外的空间被散列,因为如果有的话,我会修剪第一个和最后一个额外的空间。
-
您的数据库中的电子邮件是唯一的吗?
-
是的,电子邮件和 ID 都是唯一的
-
尝试删除现有文档,插入新数据并立即尝试
标签: node.js mongodb express mongoose bcrypt