NodeJS:Bcrypt:错误:非法参数:未定义,字符串

问题描述 投票:0回答:1

这是我用来对登录应用程序进行验证的控制器代码的一部分,因此所有内容都已正确插入数据库及其加密权限中,但是当我尝试提交用户数据时,它无法验证密码,说错误位于 bcrypt.compare,我输入了正确的错误,即使我输入错误,它也应该将我重定向到主页,而不是程序崩溃。


Error: Illegal arguments: undefined, string
    at _async (C:\Users\CHINO\Desktop\Sistema-Pre-Escolar-Manitas-De-Oro-main (1)\Sistema-Pre-Escolar-Manitas-De-Oro-main\node_modules\bcryptjs\dist\bcrypt.js:286:46)
    at C:\Users\CHINO\Desktop\Sistema-Pre-Escolar-Manitas-De-Oro-main (1)\Sistema-Pre-Escolar-Manitas-De-Oro-main\node_modules\bcryptjs\dist\bcrypt.js:307:17
    at new Promise (<anonymous>)
    at Object.bcrypt.compare (C:\Users\CHINO\Desktop\Sistema-Pre-Escolar-Manitas-De-Oro-main (1)\Sistema-Pre-Escolar-Manitas-De-Oro-main\node_modules\bcryptjs\dist\bcrypt.js:306:20)
    at C:\Users\CHINO\Desktop\Sistema-Pre-Escolar-Manitas-De-Oro-main (1)\Sistema-Pre-Escolar-Manitas-De-Oro-main\controllers\authController.js:31:6
    at processTicksAndRejections (node:internal/process/task_queues:96:5)


AuthController.js:



exports.PostLogin = (req, res, next) => {

    const password = req.body.password
    const email = req.body.email

    User.findOne({ where: {email : email}})
    .then((user) => {
        if (!user) {
           flash.req("errors","Ha ocurrido un error al momento de ingresar el Correo electronico")
    return res.redirect("/login")
    }

    bcrypt
    .compare(password, user.password)
    .then((result) =>{
        if (result){
            req.session.IsloggedIn=true
            req.session.user = user
            return req.session.save((err) =>
            {
                flash.req("errors","Contreseña invalida")

                console.log("Error al momento de compare",err)
                res.redirect("/")
            });
        }
        res.redirect("/login")

    });
javascript node.js express bcrypt bcryptjs
1个回答
0
投票

正如 @epascarello 提到的,您将遍历用户集合并尝试根据您输入的电子邮件获取用户,该电子邮件应使用异步 - 等待调用进行包装。这样它就会等待用户被发现,然后将密码与

bcrypt

进行比较
exports.PostLogin = async (req, res, next) => {

    const password = req.body.password
    const email = req.body.email

    await User.findOne({ where: {email : email}})
    .then((user) => {
    bcrypt
    .compare(password, user.password)
    .then((result) =>{
        if (result){
            req.session.IsloggedIn=true
            req.session.user = user
            return req.session.save((err) =>
            {
                flash.req("errors","Contreseña invalida")

                console.log("Error al momento de compare",err)
                res.redirect("/")
            });
        }
        res.redirect("/login")

    });
© www.soinside.com 2019 - 2024. All rights reserved.