I useing MongoDB 7 so model.findOne() have error no longer call back accepted

I’m new in express nodejs and using MongoDB 7. So i get several error when using the below code: (which is route/users.js)

passport.use(new LocalStrategy({ passReqToCallback : true},
	async function(username, password, done) {
		await User.getUserByUsername({ username: username }, function(err, user){
			if(err) throw err;
			if(!user){
				console.log('Unknow User');
				return done(null, false, { message: 'Incorrect username or password.' });
			}
			User.comparePassword(password, user.password, function(err, isMatch){
			 if(err) throw err;
			 if(isMatch){
			 	return done(null, user);
			 }else{
			 	console.log('Invalid Password');
			 	return done(null, false, {message: 'Invalid Password'});
			 } 	
			});
		});
	}
));

and next model/user.js have the below code:

> module.exports.comparePassword = function(candidatePassword, hash, callback){
	bcrypt.compareSync(comparePassword, hash, function(err, isMatch){
		if(err) return callback(err);
		callback(null, isMatch);
	});
}

module.exports.getUserById = function(id, callback){
	User.findById(id, callback);
}
module.exports.getUserByUsername = function(username, callback){
	var query = {username: username};
	User.findOne(query,callback);
}

Please if possible give the total solution above code.Thx

TypeError: Model.findOne() have error no longer call back accepted

I assume youre using mongoose, google mogo mongoose callback.

var passport = require('passport');
var localStrategy = require('passport-local').Strategy;

OK, I solved it myself. The answer is below:

passport.use(new LocalStrategy(
	async function (username, password, cb) {		
		await User.findOne({username: username}).then(user=>{			
			// the fetch user is not found
			if(!user){				
				return cb(null, false, { message: 'Incorrect username or password.' });
			}			
			// use bcrypt to compare the password ans validate
			User.comparePassword(password, user.password, (err, isMatch)=>{
				if(err) throw err;
				if(isMatch){					
					return cb(null, user);
				}else{
					return cb(null, false, {message:'Password ectered is incorrect'});
				}
			});		
		}).catch((err)=>{
		   	console.log(err);
		});
	}
));		

And comarePassword : model/user.js

module.exports.comparePassword = function (candidatePassword, hash, callback) {
  bcrypt.compare(candidatePassword, hash, (err, isMatch) => {
    if (err)  return callback(err); 
    callback(null, isMatch);
  });
};

:slight_smile: