无法使用电子邮件与身份证本地nodejs..estried几个例子进行身份validation

我一直在尝试使用电子邮件和密码来使用本地通行证进行身份validation。 当我使用用户名时,我有类似的代码,它工作正常。 用电子邮件,我做了一些改变,但没有任何工作。 在types'post'的端点'/ login'处,users.js中的条件!用户条件(以下面显示为第二代码片段)以某种方式执行。 它甚至没有进入passport.use。 以下是代码: – 在user.js(模型文件)中,

var mongoose=require('mongoose'); var bcrypt=require('bcryptjs'); //user schema var UserSchema=mongoose.Schema({ phone: { type:String, }, email:{ type: String, index:{unique:true} }, password:{ type: String }, firstname:{ type: String }, lastname:{ type: String } }); var User=module.exports = mongoose.model('User',UserSchema); module.exports.getUserByUsername=function(email,callback){ var query={email:email}; User.findOne(query, callback); } module.exports.comparePassword=function(candidatePassword, hash, callback){ bcrypt.compare(candidatePassword, hash, function(err, isMatch) { callback(null,isMatch); }); } } 

在users.js(我指定路线):

 var express = require('express'); var router = express.Router(); var bodyParser=require('body-parser'); var User=require('../models/user'); var passport=require('passport'); var localStrategy=require('passport-local').Strategy; router.post('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err); } if (!user) { /*this is where the problem is this code executes everytime*/ return res.send('User not found'); } req.logIn(user, function(err) { if (err) { return next(err); } return res.json(user); }); })(req, res, next); }); passport.serializeUser(function(user, done) { done(null, user.id); }); //for sessions passport.deserializeUser(function(id, done) { User.getUserById(id, function(err, user) { done(err, user); }); }); //this doesnt seem to work passport.use(new localStrategy({usernameField:'email', passwordField:'password'},function(email,password,done){ User.getUserByUsername(email, function(err,user){ if(err) throw err; if(!user){ return done(null,false,{message: 'User not found'}); } User.comparePassword(password, user.password, function(err, isMatch){ if(err) return done(err); if(isMatch){ return done(null, user); } else{ return done(null,false,{message: 'Password doesnt match our records'}); } }); }); })); 

请注意,这里没有前端。 我只是用邮差来testing我的apis。

此代码适用于电子邮件。 问题是我也有另一个名为admin.js和admins.js的文件,它们与用户和用户执行相同的任务。 但是,pipe理员使用用户名。 我有相同的Passport.use代码为pipe理但是,用户试图访问该文件,而不是当前的。 一旦我删除了pipe理代码,它一切工作。