我对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()的内部工作有关,但我不确定。
感谢。
答案 0 :(得分:2)
试试这个:
app.post('/login', loginAuth())
...
function loginAuth(){
return passport.authenticate('local-login', {
successRedirect : '/profile',
failureRedirect : '/login',
failureFlash : true
})
}
在原始代码中,您正在执行passport.authenticate
,而在第二个版本中,您只是在不执行护照逻辑的情况下传递函数。