Esta parte del código maneja el enrutamiento de autorización de inicio de sesión en mi aplicación
const express = require("express"); const authController = require('../controllers/authController'); const indexController = require('../controllers/indexController'); const router = express.Router(); router.use("/login", (req, res, next) => { if(req.session.loggedIn) { res.redirect('/account'); } next(); }); router.use("/account", (req, res, next) => { if(!req.session.loggedIn) { res.redirect('/login'); } next(); }); router.get('/', (req, res) => { res.redirect('/login'); }); router.get('/login', (req, res) => { res.render('login'); }); router.get('/log-out', authController.logOut); router.get("/account", indexController.getAccountData); module.exports = router;No hubo problemas y funcionó bien hasta hace unos días.
No he cambiado nada en este archivo ni authController ni indexController . Cuando realizo un cambio (en otras partes), nodemon reinicia la aplicación y automáticamente salto a la página de inicio de sesión porque, obviamente, todas las sesiones se destruyen. Pero recibo un error en la función getAccountData (el error dice que req.session no está definido).
Como puede ver, no hay forma de que la aplicación alcance esa función sin sesiones configuradas.
Tengo que reiniciar la aplicación de nuevo para actuar correctamente.
req.session.loggedIn generaría un error cada vez que la sesión no esté definida. Debe verificar si está definido antes de intentar acceder a loggedIn .
Probar:
router.use("/login", (req, res, next) => { if(req.session && req.session.loggedIn) { res.redirect('/account'); } next(); }); router.use("/account", (req, res, next) => { if(!req.session || !req.session.loggedIn) { res.redirect('/login'); } next(); }); import MongoStore from "connect-mongo"; import session from "express-session"; app.use( session({ store: MongoStore.create({ mongoUrl: process.env.MONGODB_URI || "mongodb://localhost:27017/project", }), secret: "secret key", cookie: { maxAge: sessionExpireInMilliseconds }, }) );