I am using Passport for my node.js application, and currently I am using a username to login.
On my user registration page, I allow the user to register their unique username and email address.
I need a login page using "Login using username / email:" ________
Where the script can determine if there is an "@" in the field and look for an email address instead of a username.
I tried several hours to no avail.
here is my passport .js
var mongoose = require('mongoose') var LocalStrategy = require('passport-local').Strategy var User = mongoose.model('User'); module.exports = function(passport, config){ passport.serializeUser(function(user, done){ done(null, user.id); }) passport.deserializeUser(function(id, done) { User.findOne({ _id: id }, function (err, user) { done(err, user); }); }); passport.use(new LocalStrategy({ usernameField: 'username', passwordField: 'password' }, function(username, password, done) { User.isValidUserPassword(username, password, done); })); }
EDIT: below user user.js on request
var mongoose = require('mongoose'); var hash = require('../util/hash.js'); UserSchema = mongoose.Schema({ username: String, email: String, salt: String, hash: String }) UserSchema.statics.signup = function(username, email, password, done){ var User = this; hash(password, function(err, salt, hash){ if(err) throw err; // if (err) return done(err); User.create({ username : username, email: email, salt : salt, hash : hash }, function(err, user){ if(err) throw err; // if (err) return done(err); done(null, user); }); }); } UserSchema.statics.isValidUserPassword = function(username, password, done) { this.findOne({username : username}, function(err, user){ // if(err) throw err; if(err) return done(err); if(!user) return done(null, false, { message : 'Incorrect username.' }); hash(password, user.salt, function(err, hash){ if(err) return done(err); if(hash == user.hash) return done(null, user); done(null, false, { message : 'Incorrect password' }); }); }); }; var User = mongoose.model("User", UserSchema); module.exports = User;