简体   繁体   English

Bcrypt将密码结果与Node.js中的未定义错误进行比较

[英]Bcrypt comparing passwords results to undefined error in Nodejs

I am setting up a simple login with passport an error occurs while trying to compare user password with saved password 我正在使用护照设置简单的登录名,尝试将用户密码与保存的密码进行比较时发生错误

module.exports = function (passport) {
    passport.use(new LocalStrategy(function (username, password, done) {
        let query = { email: username };

        User.find(query, function (err, user) {

            if (err) { 
                console.log(err); 
            }
            else {
                if (!user) {
                    console.log(3)
                    return done(null, false, { message: 'No user found' })
                } else {
                    bcrypt.compare(password, user.password, function (err, isMatch) {
                        if (err) {
                            console.log(err);
                        } else {
                            console.log(user.password)

                            if (isMatch) {
                                console.log(5)
                                return done(null, user);
                            } else {
                                console.log(6)
                                return done(null, false, { message: 'Wrong Password' })
                            }
                        }
                    })
                }
            }

        })
    }));

when I console.log(user) : 当我console.log(user)

[ { _id: 5c5995448a88110c35673bb7,
    firstname: 'test',
    lastname: 'sample',
    email: 'testsample@gmail.com',
    password:
     '$2b$10$bDVGjce/aDxr/NzXFw.qO.DA4tKjY6EwMARgl/NZfb0FNTaTxYwCW',
    __v: 0 } ]

but using bcrypt, user.password results to undefined while trying to compare saved password with the form's password entry, yet, seemingly the password has been received from the query results, as evident in console.log(user) results. 但是,使用bcrypt时,试图将保存的密码与表单的password条目进行比较时, user.password结果为undefined ,但是,似乎已经从查询结果中接收到了密码,如console.log(user)结果所示。

Since mongoDB is returning 'user' as an array with a single item you can either: 由于mongoDB会将“用户”作为具有单个项目的数组返回,因此您可以:

module.exports = function (passport) {
passport.use(new LocalStrategy(function (username, password, done) {
    let query = { email: username };

    User.find(query, function (err, user) {

        if (err) { 
            console.log(err); 
        }
        else {
            if (!user) {
                console.log(3)
                return done(null, false, { message: 'No user found' })
            } else {
                bcrypt.compare(password, user[0].password, function (err, isMatch) {
                    if (err) {
                        console.log(err);
                    } else {
                        console.log(user[0].password)

                        if (isMatch) {
                            console.log(5)
                            return done(null, user);
                        } else {
                            console.log(6)
                            return done(null, false, { message: 'Wrong Password' })
                        }
                    }
                })
            }
        }

    })
}));

or you could 或者你可以

module.exports = function (passport) {
passport.use(new LocalStrategy(function (username, password, done) {
let query = { email: username };

User.find(query, function (err, user) {

    if (err) { 
        console.log(err); 
    }
    else {
        if (!user) {
            console.log(3)
            return done(null, false, { message: 'No user found' })
        } else {
            let userdata = user[0];
            bcrypt.compare(password, userdata.password, function (err, isMatch) {
                if (err) {
                    console.log(err);
                } else {
                    console.log(userdata.password)

                    if (isMatch) {
                        console.log(5)
                        return done(null, user);
                    } else {
                        console.log(6)
                        return done(null, false, { message: 'Wrong Password' })
                    }
                }
            })
        }
    }

})
}));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM