LocalStrategy函数从未调用

我试图用express4 / passportjs设置一个简单的本地策略authentication,但是authenticationfunction从来没有被调用:这里是我的代码

var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; app.use(compress()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); /* AUTHENTIFICATION */ app.use(passport.initialize()); app.use(passport.session()); passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(user, done) { done(null, user); }); passport.use(new LocalStrategy( function(username, password, done) { //THIS FUNCTION IS NEVER CALLED console.log("Local strategy"); } )); app.post('/login', function(req, res) { console.log("user : ", req.body.username); console.log("password : ", req.body.password); passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' }) }); /* !AUTHENTIFICATION */ app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'bower_components'))); app.use(express.static(path.join(__dirname, 'controllers'))); app.use(express.static(path.join(__dirname, 'modules'))); app.use('/', routes); app.use('/users', users); 

当我在/ login发送一个post请求时,我在日志中看到用户名和密码,但是password.authentificate方法不会做任何事情。 它应该调用LocalStrategy函数和console.log('策略'),但它不。

有人知道如何解决这个问题吗?

谢谢

authenticate()'s function signature is standard Connect middleware从这里 authenticate()'s function signature is standard Connect middleware

所以需要通过req, res, next引用

所以你可以使用它作为路由中间件

 app.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' })); 

要么

 app.post('/login', function(req, res, next) { passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' })(req, res, next); });