Reputation: 115
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
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