如果用户已经存在,passportjs会在注册时进行validation

我试图创build一个注册用户,如果已经存在的数据库login到系统,否则在系统中创build一个新的用户。

到目前为止,我已经拿出了下面的代码。

//filename passport-config var config = require('./config'); var passport = require('passport'); var User = require('./models/user'); var LocalStrategy = require('passport-local').Strategy; var isValidPassword = function(user, password){ return bCrypt.compareSync(password, user.password); }; // Generates hash using bCrypt var createHash = function(password){ return bCrypt.hashSync(password, bCrypt.genSaltSync(10), null); } // As with any middleware it is quintessential to call next() // if the user is authenticated var isAuthenticated = function (req, res, next) { if (req.isAuthenticated()) return next(); res.redirect('/'); } passport.use('signup', new LocalStrategy({ passReqToCallback : true }, function(req, email, password, done) { findOrCreateUser = function(){ // find a user in Mongo with provided email User.findOne({'email':email},function(err, user) { // In case of any error return if (err){ console.log('Error in SignUp: '+err); return done(err); } // already exists if (user) { User.findOne({ 'email' : email }, function(err, user) { if (!user){ console.log('User Not Found with email '+email); return done(null, false); } // User exists but wrong password, log the error if (!isValidPassword(user, password)){ console.log('Invalid Password'); return done(null,false); } }); } else { // if there is no user with that email // create the user var newUser = new User(); // set the user's local credentials newUser.email = email; newUser.password = createHash(password); // save the user newUser.save(function(err) { if (err){ console.log('Error in Saving user: '+err); throw err; } console.log('User Registration succesful'); return done(null, newUser); }); } }); }; // Delay the execution of findOrCreateUser and execute // the method in the next tick of the event loop process.nextTick(findOrCreateUser); }) ); 

我的路由器

 router.post('/signup', passport.authenticate('signup', { successRedirect: '/timeslot', failureRedirect: '/' })); my server.js file var express = require('express'); var bodyParser = require('body-parser'); var leisure = require('leisure'); var cors = require('cors'); var passport = require('passport'); var config = require('./config'); var passportConfig = require('./passport-config'); var session = require('express-session') var expressHbs = require('express-handlebars'); var mediaTypes = [ { contentType: 'application/hal+json' }, { contentType: 'application/json' }, { contentType: 'text/html' } ]; var app = express(); /*Handlebars */ app.engine('handlebars', expressHbs({layout: false}) ); app.set('view engine', 'handlebars'); app.use(express.static(__dirname + '/assets')); app.use(cors(config.settings.cors)); app.use(bodyParser()); app.use(leisure.accept(mediaTypes)); /*sessions */ app.use(session({ secret: 'keyboardSFS23432@@!#!@at' })); app.use(passport.initialize()); app.use(passport.session()); var routes = require('./routes'); app.use('/', routes.router); function start () { var port = process.env.PORT || 3000; app.listen(port); console.log('Appoints service started on port ' + port); } exports.app = app; exports.start = start; 

注册路线不工作,我很困惑如何debugging,任何build议将不胜感激。