/ La estrategia local de / NodeJS Passport informa al usuario cliente que está autenticado - node.js, session-cookies, passport.js, passport-local

La estrategia local de NodeJS Passport informa al usuario del cliente que está autorizada - node.js, session-cookies, passport.js, pasaporte-local

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 № 1

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