护照本地策略没有被调用

时间:2015-09-17 21:50:56

标签: node.js express passport.js

这是我的路线处理程序:

exports.login = function(req, res, next) {
    if (!req.body.username || !req.body.password)
        next();
    passport.authenticate('local');
};

我知道当我提交登录表单并且req.body.usernamereq.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);
                }
            );
        }
    ));

验证回调顶部的语句未记录到控制台。

我不知道还有什么可以测试。我已经尝试升级到最新版本的护照......

1 个答案:

答案 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) ;
};