【问题标题】:compareSync of Bcrypt always returning falseBcrypt 的 compareSync 总是返回 false
【发布时间】: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


【解决方案1】:

我尝试了一切,但仍然无法解决这个问题。如果您找到解决方案,请告诉我。我在整个互联网上搜索了这个问题,但不幸的是到目前为止还没有找到解决我的问题的方法。

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    相关资源
    最近更新 更多