使用passport.js LocalStrategy进行一个字段validation

我正在使用passport.js LocalStrategy来validation用户名和密码。 但现在我有一个字段来validation是active: true/false (无论用户是否激活)。 下面的代码显示了用户名和密码的validation。

app.js

 passport.use(new LocalStrategy({ usernameField: 'username', passwordField: 'password'}, function(username, password, done) { User.findOne({ name : username}, function(err, user) { if (!user){ return done(null, false,{message: 'Incorrect username' }); } if(user){ var validPassword = user.comparePassword(password); if(!validPassword){ return done(null, false,{message: 'Incorrect password' }); } } return done(null, user); }); } )); router.post('/pages/auth/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (user === false) { return res.json({ success:false, message: info.message, }); } else { req.login(user, function(err) { return res.json({ success:true, Id:req.sessionID, userName:req.body.username, Email:req.user.email, uid:req.user._id, mobile:req.user.mobile, }); }); } })(req, res, next); }); 

我的collections在mongoDB中看起来如下所示

 { "_id": ObjectId("57921ce8f8a10f644ababf2d"), "name": "abc", "email": "abc@gmail.com", "password": "32432423#fds#yy&1233S&dr&@", "mobile": "9886787560", "generatedOtp": "270371", "active": false, "__v": NumberInt(0) } 

现在它会检查用户名和密码,如果他们是正确的,然后login,否则会显示消息。 像这样,我想检查active领域也。 请帮帮我。

下面的代码应该适合您的需求。
请注意,我也删除检查, if (user) { ...之前检查密码是没有必要的。 如果user将是null / undefined那么你的代码将不会达到这一点,因为你首先检查if (!user) { ...从那个函数返回。

 passport.use(new LocalStrategy({ usernameField: 'username', passwordField: 'password'}, function(username, password, done) { User.findOne({ name : username}, function(err, user) { if (!user){ return done(null, false,{message: 'Incorrect username' }); } if (!user.active) { return done(null, false, {message: 'User is inactive'}); } var validPassword = user.comparePassword(password); if(!validPassword){ return done(null, false,{message: 'Incorrect password' }); } return done(null, user); }); } ));