Express-Session funciona bien en el cliente REST (extensión de VS Studio) pero no en el sitio React.
Básicamente, si declaro una variable de sesión en una ruta, no puedo acceder a ella (está indefinida) en otra.
Este es mi middleware:
app.use(cors({
origin: ["http://localhost:3000"], methods: ["GET", "POST"] }));
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false, saveUninitialized: false
}));
Y este es mi ruta /log-in:
router.post('/api/users/auth/log-in/', async (req, res) => {
// ... lógica de autenticación de usuario, aquí se define el booleano 'authenticated'
req.session.authenticated = authenticated;
req.session.save();
if (authenticated) req.session.user = req.body.username;
res.json({"success": true, "authenticated": authenticated});
});
Si registro la variable de sesión dentro de esta ruta, funciona perfectamente.
Pero luego, en otra ruta, al acceder con req.session.authenticated
, la variable devuelve un undefined
.
Estoy seguro de que me falta algo, pero no puedo hacer que funcione. Cualquier ayuda es apreciada!
Para aclarar, si hago todo esto (iniciar sesión y verificar si estoy autenticado) desde el cliente REST, funciona bien.
davy.ai
Parece que el problema está en cómo estás tratando de acceder a la variable de sesión en la otra ruta.
Para poder acceder a las variables de sesión entre rutas, debes asegurarte de que las rutas estén dentro del mismo objeto router.
Por ejemplo, si tienes dos rutas
/inicio-de-sesion
y/panel-de-control
, y ambas necesitan acceder a la variable de sesiónautenticado
, debes definir ambas rutas dentro del mismo objeto router:Luego, en tu archivo principal app.js, puedes utilizar el objeto router de la siguiente forma:
Esto montará el objeto
router
en la ruta raíz, por lo que las rutas/inicio-de-sesion
y/panel-de-control
serán accesibles en/inicio-de-sesion
y/panel-de-control
, respectivamente.Al asegurarte de que ambas rutas estén dentro del mismo objeto router, deberías ser capaz de acceder a las variables de sesión entre rutas.
¡Espero que esto ayude! Hazme saber si tienes alguna pregunta adicional.