Creando la aplicación Auth usando express mangosta y pasaporte js. después de agregar la verificación de correo usando el servidor nodemailer, se detuvo la adición del usuario de req.user a res.locals.currentUser se puede ver desde el middleware. antes de agregar la verificación por correo electrónico, funcionaba correctamente.
app.use(express.urlencoded({ extended: true })); app.use(session(sessionObject)); app.use(flash()); app.use(passport.initialize()); app.use(passport.session()); passport.use(new LocalStrategy(User.authenticate())); passport.serializeUser(User.serializeUser()); passport.deserializeUser(User.deserializeUser()); app.use((req, res, next) => { res.locals.currentUser = req.user; res.locals.success = req.flash("success"); res.locals.error = req.flash("error"); next(); }); app.get("/", (req, res) => { console.log(res.locals); res.render("index"); }); app.get("/login", (req, res) => res.render("login")); app.post( "/login", passport.authenticate("local", { failureFlash: true, failureRedirect: "/login", }), (req, res) => { req.flash("success", "Welcome Back!"); res.redirect("/"); console.log(req.user); } );El problema era: estaba trabajando en un entorno local y había configurado la cookie de sesión para secure .
Dado que Localhost se ejecuta en HTTP y no en HTTPS, el navegador no enviaba la cookie de sesión a la aplicación después de que la aplicación fuera redirigida, lo que impedía que Passport cargara los datos de la sesión y creara la clave de req.user .
Todo en req y res caduca al final de la solicitud, solo req.session se escribe en el almacén de sesiones ( sessionObject ) y desde allí se transfiere a la siguiente solicitud.
Si desea mantener al usuario actual en la sesión, escríbalo en req.session.currentUser . Luego necesita passport.js y req.user solo durante la primera solicitud, donde se establece la sesión.