在单独的函数中调用passport.authenticate是不行

时间:2015-06-25 13:01:28

标签: javascript node.js passport.js

我对Node和Passport相对较新,我正在尝试使用OAuth登录表单。我设置Passport没有任何问题,它完全正常运行。

当我开始清理代码以将路由与中间件分开时,它才崩溃。

我在更改之前和之后都包含了部分代码。

所以,这有效:



module.exports = function(app, passport) {
  	app.get('/login', loginIndex)
    
	app.post('/login', passport.authenticate('local-login', {
        successRedirect : '/profile',
        failureRedirect : '/login',
        failureFlash : true
    }))
    
    function loginIndex(req, res) {
	  res.render('login.ejs', {message: req.flash('loginMessage')})
    }
}




但这不是:



module.exports = function(app, passport) {
  app.get('/login', loginIndex)
  app.post('/login', loginAuth)

  function loginIndex(req, res) {
  	res.render('login.ejs', {message: req.flash('loginMessage')});
  }


  function loginAuth(){
  	  passport.authenticate('local-login', {
          successRedirect : '/profile',
          failureRedirect : '/login',
          failureFlash : true
      })	
  }
}




因此,两者之间的唯一区别是我已将passport.authenticate()调用移入函数loginAuth()。 我想这与passport.authenticate()的内部工作有关,但我不确定。

感谢。

1 个答案:

答案 0 :(得分:2)

试试这个:

 app.post('/login', loginAuth())

...

function loginAuth(){
      return passport.authenticate('local-login', {
          successRedirect : '/profile',
          failureRedirect : '/login',
          failureFlash : true
      })    
  }

在原始代码中,您正在执行passport.authenticate,而在第二个版本中,您只是在不执行护照逻辑的情况下传递函数。