/ / passport autentica condicionalmente: Route.post () requiere funciones de devolución de llamada pero obtuvo un [objeto Indefinido] - node.js

pasaporte autenticado condicionalmente: Route.post () requiere funciones de devolución de llamada pero obtuvo un [objeto No definido] - node.js

ok, tenía un código haciendo login usando el pasaporte Ahora basado en una distribución de Linux diferente, quiero hacerlo de manera diferente.

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

Pero da tal error en Ubuntu: Error: Route.post () requiere funciones de devolución de llamada pero obtuvo un [objeto Indefinido]

¿Cómo arreglarlo por favor? Gracias !

Respuestas

1 para la respuesta № 1

Estas pasando el resultado de loginDispatch como middleware. loginDispatch, por lo tanto, necesita devolver una función. Modifique su función para devolver el middleware de pasaporte apropiado:

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

Como comentario aparte, probablemente quieras manejar la final else un poco más robusto, pero supongo que este es el código de prueba y lo sabes :)