【发布时间】:2022-10-05 14:40:29
【问题描述】:
const bcrypt = require("bcryptjs")
const validateUserInput = (email,password) => {
return email && password;
}
const comparePassword = (password, hashedPassword) => {
return bcrypt.compareSync(password, hashedPassword);
}
module.exports = {
validateUserInput,
comparePassword
};
const register = asyncErrorWrapper(async (req, res, next) => {
const {name, email, password, role} = req.body;
const user = await User.create ({
name,
email,
password,
role
});
sendJwtToClient(user,res);
})
const login = asyncErrorWrapper(async (req, res, next) => {
const {email, password} = req.body;
if (!validateUserInput(email, password)) {
return next(new CustomError("Please check your inputs", 400));
}
const user = await User.findOne({ email }).select("+password");
if (!comparePassword(password, user.password)) {
return next(new CustomError("Please check your credentials", 400));
}
sendJwtToClient(user,res);
module.exports = {
register,
login,
getUser
}
});
我的目的是解密加密的密码并将其与用户提供的密码进行比较。我正在使用邮递员来测试我的应用程序。它总是返回假。我几乎尝试了所有方法,但没有找到解决此问题的解决方案,并想听听您的建议。我仍在尝试学习 javascript,并且我已经在 stackflow 中检查了有关此主题的其他问题。
我还想分享一下邮递员的截图,以便为您提供更好的解释。
邮递员登记:https://prnt.sc/D0M__puraDME
邮递员登录身份验证:https://prnt.sc/gYj_RcmfV1z9
我在这里很新,如果我在提问时犯了任何错误,请告诉我。
更新:我按照您的要求做了,并尝试在某些地方使用登录。我会在这里发布结果。仍然很难解决这个问题。我还需要一些帮助。
https://prnt.sc/M1JSrz-fYJHi 我在这里使用 console.log 作为密码和 hashedPassword。
https://prnt.sc/LEhiAElf0ber 我在这里使用了用户密码和密码的控制台登录。
我必须与图像分享这个,因为它还包含这里的邮递员操作。
【问题讨论】:
-
您只需选择
password字段。但是您将user.password传递给未定义的函数。这就是为什么它总是返回错误。试试comparePassword(password, user) -
在注册过程之后,用户提供的密码被加密。我正在尝试解密已存储的密码,并在登录身份验证中尝试再次与给定密码进行比较。当我按照你说的做的时候。它给出了这个结果。 prnt.sc/rMqC0ULWr4_s@埃尔达
-
你试过用
console.log(user)看看你得到了什么吗? -
@KonradLinkowski 到底在哪里?在登录部分下?我在注册时尝试了 console.log(user) ,它给出了用户给出的密码的加密版本。
-
@KonradLinkowski console.log(user.password) 给出了这个: $2a$10$4c/a30g8UQ/PV/J0jQPQhOxtW4Otjn68yL3vQAf4RR0QdQY0esdou 所以这意味着, user.password 是这里密码的哈希版本。我猜 comparePassword 不怎么解密。除此之外,日志 hashedPassword 在邮递员上给出了这个:“message”:“hashedPassword is not defined”
标签: javascript mongodb postman