2017-08-10 92 views
0

我使用this tutorial(它的一部分)使用Passport lib构建应用程序。护照回叫不叫

注意,我不需要注册,只需登录表单。

其中一个问题是我的LocalStrategy回调从未被调用过。用于存储我使用蒙戈:

mongoose.connect(dbConfig.url, { 
    useMongoClient: true 
}); 

//dbConfig 

module.exports = { 
    'url' : 'mongodb://localhost/passport' 
} 

登录路径看起来像这样:

module.exports = function(app, passport) { 
    app.get('/login', function(req, res) { 
     res.render('login', { 
      message: req.flash('loginMessage') 
     }); 
    }); 

    app.post('/login', passport.authenticate('login', { 
     successRedirect: '/', // redirect to the secure profile section 
     failureRedirect: '/login', // redirect back to the signup page if there is an error 
     failureFlash: true // allow flash messages 
    })); 
} 

护照的逻辑是:

module.exports = function(passport) {  
    passport.serializeUser(function(user, done) { 
     done(null, user.id); 
    }); 

    passport.deserializeUser(function(id, done) { 
     User.findById(id, function(err, user) { 
      done(err, user); 
     }); 
    }); 

    passport.use('login', new LocalStrategy({ 
     passReqToCallback: true 
    }, function(req, username, password, done) { 
     console.log('start'); // never called 

     User.findOne({ 
      'local.email': email 
     }, function(err, user) { 
      if (err) { 
       return done(err); 
      } 

      if (!user) { 
       return done(null, false, req.flash('loginMessage', 'No user found.')); 
      } 

      if (!user.validPassword(password)) { 
       return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); 
      } 

      return done(null, user); 
     }); 
    })); 
}; 

的console.log( '开始');永远不会被调用,虽然passport.authenticate('login'...)被调用。

什么是问题?

回答

0

我终于修好了,一切正常。如果有人面临同样的问题,我在这里发布几个问题和解决方案。

req.body在我app.post空的,因为我没加体解析器。与固定它:

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

用户名字段,因为我把它命名为电子邮件和护照预期用户名所有的时间是空的。固定为:

new LocalStrategy({ 
     usernameField: 'email', // this parameter 
     passReqToCallback: true 
    }