He implementado Passport con Passport-local y MongoDB y está funcionando muy bien.
Sin embargo, esto es un simple cliente de carga únicaLa aplicación y, por lo tanto, node no es responsable de la representación de html. Así que actualmente muestro una carga de un spinner en la carga de la aplicación y hago una llamada por separado a una API para determinar si el usuario ha iniciado sesión para generar condicionalmente algunas cosas:
router.get("/me", function (req, res) {
res.send(req.isAuthenticated() ? {} || 401);
});
Ya que el pasaporte ya autentica mis rutas y llamadas. deserializeUser
Esto parece inútil. Necesito una forma de pasar una información adicional (¿en la cookie?) que indique que el usuario está autenticado, supongo que en deserializeUser
?
server.use(session({secret: settings.sessionSecret}));
server.use(passport.initialize());
server.use(passport.session());
....
passport.use(new LocalStrategy(
localOpts,
function(email, password, done) {
User.findOne({
email: email,
activated: true
}, function (err, user) {
....
});
}
));
passport.serializeUser(function (user, done) {
done(null, user._id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
Tenga en cuenta que las dos cookies que se crean cuando el inicio de sesión se realiza correctamente:
express:sess
express:sess.sig
Cuando detecta la presencia de estas cookies parece que simplemente llama. deserializeUser
Por lo tanto, creo que puedo comunicarle al cliente que el usuario está autenticado allí o iniciar sesión dentro passport.use
middleware?
Respuestas
0 para la respuesta № 1Resulta que simplemente puedo agregar un middleware después de passport.session. Me preocupaba que req.isAuthenticated
dispararía otra consulta a la db pero no "t:
server.use(function(req, res, next) {
res.cookie("isAuthenticated", req.isAuthenticated());
next();
});