I'm using passport-local to provide local authentication on my node app. However, I would like to change this to authenticate with an email address rather than a username. Is there a way to do this?
Thank you.
You must first change the default username field to email with { usernameField: 'email' } you can then run a database search based on the email and check the password:
passport.use(new LocalStrategy({ usernameField: 'email' }, function(email, password, done) {
  UserModel.findOne({ email: email }, function(err, user) {
    // Check password functionality  
  })
})
				
			
				
				Since you have to implement the validation yourself (in the LocalStrategy verifier callback), you can pass it anything you like:
passport.use(new LocalStrategy(function(email, password, done) {
  // search your database, or whatever, for the e-mail address
  // and check the password...
});
				
			You can query the database for the email-id from request params like below:
passport.use('signup', new LocalStrategy({
        passReqToCallback : true // allows us to pass back the entire request to the callback
    },
    function(req, username, password, done) {
        //console.log(email);
        console.log(req.param('email'));
        findOrCreateUser = function(){
            // find a user in Mongo with provided username
            User.findOne({ 'email' :  req.param('email') }, function(err, user) {
            });
        }))