BizMAN
BizMAN

Reputation: 115

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):

[ { _id: 5c5995448a88110c35673bb7,
    firstname: 'test',
    lastname: 'sample',
    email: '[email protected]',
    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.

Upvotes: 0

Views: 882

Answers (1)

iLuvLogix
iLuvLogix

Reputation: 6420

Since mongoDB is returning 'user' as an array with a single item you can either:

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' })
                    }
                }
            })
        }
    }

})
}));

Upvotes: 1

Related Questions