gpt4 book ai didi

javascript - 我使用 bcryptjs compare 的结果返回 false。将明文与来自数据库 (mongodb) 的散列密码进行比较时。(node-js)

转载 作者:行者123 更新时间:2023-12-05 05:38:53 25 4
gpt4 key购买 nike

不幸的是,比较函数的结果总是错误的?即使发布了正确的数据。认为这可能与 bcrypt 的比较功能有关?

注册对密码进行散列和加盐

 module.exports.signupPost = async (req, res) => {
const { email, password } = req.body;
//create a user with hashed password
try {
const newUser = await User.create({ email, password });
newUser.password = await bcrypt.hash(newUser.password, 12);
newUser.save();
res.status(200).json({ user: newUser._id });
} catch (err) {
errors = handlerErr(err);
res.status(400).json({ errors });
}
};

登录将密码与散列密码进行比较

    module.exports.loginPost = async (req, res) => {
const { email, password } = req.body;
try {
const user = await User.findOne({ email });
if (!user) {
res.status(404).json({ email: "No user found" });
}
//if user exist check password is a match
const user = await User.findOne({ email });
if (!user) {
return res.status(404).json({ email: "No user found" });
}
try {
const match = await bcrypt.compare(
password.toString(),
user.password,
function (err, res) {
console.log(res);// returns false
}
);
} catch (err) {}
};

user schema

数据库用户模式

    const userSchema = new mongoose.Schema({
email: {
type: String,
required: [true, "Please enter a email"],
unique: true,
lowercase: true,

},
password: {
type: String,
required: [true, "Please enter a password"],
lowercase: true,
},
});


最佳答案

从密码模式中删除 lowercase: true

在哈希之前和保存哈希时,您都将密码转换为小写。


您应该通过在 Mongoose “密码”模式中删除 lowercase: true 来允许密码大写。此设置会导致所有字符串在存储到数据库之前转换为小写。

当前的实现有 2 个错误:

  1. 当您保存 newUser 时,输入的密码会在数据库中转换为小写字母,然后您可以使用它来生成哈希值。
  2. 当您将散列密码保存到数据库时,您丢失了大写字母,因此散列不再准确。

关于javascript - 我使用 bcryptjs compare 的结果返回 false。将明文与来自数据库 (mongodb) 的散列密码进行比较时。(node-js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72827026/

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