这是我的路线处理程序:
exports.login = function(req, res, next) {
if (!req.body.username || !req.body.password)
next();
passport.authenticate('local');
};
我知道当我提交登录表单并且req.body.username
和req.body.password
包含值时会执行此操作 - 表达bodyParser正在执行其操作(我在那里设置了断点)。
这是我的本地策略:
passport.use(new LocalStrategy(
function(username, password, done) {
console.log('local strategy called with: %s', username);
var User = bsHelper.getModelFromResource('users');
User.findOne({ where: {
email_text: username,
password_hash: password
} })
.then(
function (user) {
if (!user) {
return done(null, false, { message: 'Incorrect email.' });
}
return done(null, user);
},
function(err) {
return done(err);
}
);
}
));
验证回调顶部的语句未记录到控制台。
我不知道还有什么可以测试。我已经尝试升级到最新版本的护照......
答案 0 :(得分:2)
执行passport.authenticate('local')
时,它实际上以快速路由器回调样式返回一个函数。因此,您可以调用该函数或在路由器回调中传递它:
exports.login = passport.authenticate('local')
或
exports.login = function(req, res, next) {
if (!req.body.username || !req.body.password)
next();
passport.authenticate('local')(req, res, next) ;
};