护照有条件地验证:Route.post()需要回调函数,但有一个[对象未定义]

时间:2016-07-19 21:33:38

标签: node.js

好吧我有一段代码使用护照登录。现在基于不同的Linux发行版,我想以不同的方式做到这一点。

function loginDispatch(osType) {
    if(osType == "sles") {
        passport.authenticate('myWorkingAuth');
    }
    else if(osType == "ubuntu") {
        passport.authenticate('local');
    }
    else {  
        console.log("error");
    }
}

app.post('/login', loginDispatch(osInfo), function (req, res, next) {
    next();
}, function(req, res) {
    logger.trace('login called with user = ' + req.user.name);

    //save the user in our session
    req.session.user = req.user;
    // ..............

    res.send(req.session.user);
});

但它在Ubuntu中出现了这样的错误: 错误:Route.post()需要回调函数但得到[object Undefined]

请问如何解决?谢谢!

1 个答案:

答案 0 :(得分:1)

您正在将loginDispatch的结果作为中间件传递。因此loginDispatch需要返回一个函数。修改您的功能以返回适当的护照中间件:

if(osType == "sles") {
    return passport.authenticate('myWorkingAuth');
}
else if(osType == "ubuntu") {
    return passport.authenticate('local');
}
else {  
    console.log("error");
}

顺便说一下,你可能想要更有力地处理最终的else,但我假设这是测试代码并且你知道:)