En este post te mostraré un ejemplo sencillo y claro de cómo manejar la sesión o persistencia de sesión en Node.js usando el framework express.js
Vamos a usar el paquete express-session; y de este modo podremos acceder a los datos de sesión de la petición.
Gracias a la sesión podemos hacer varias cosas. Por ejemplo, restringir el acceso solo a usuarios logueados o llevar algo como un carrito de compras.
Instalando express-session
Comienza instalando la dependencia con:
npm install --save express-session
Espera a que se termine de instalar y después impórtalo:
const session = require("express-session");
Configurar uso de sesión
Ahora instancia tu app, y después de eso indica que usarás el middleware de sesión. Para ello necesitas configurar una clave secreta. Esta debe ser aleatoria y no deberías exponerla. Aquí la pongo solo como ejemplo:
app.use(session({
secret: "987f4bd6d4315c20b2ec70a46ae846d19d0ce563450c02c5b1bc71d5d580060b",
saveUninitialized: true,
resave: true,
}));
Si tú quieres generar una clave aleatoria puedes usar uno de mis programas para generar clave hexadecimal aleatoria (descarga el exe).
Nota importante: la llamada a
app.use()
debe ser antes de que definas tus rutas.
Por ejemplo, lo siguiente es correcto:
// Primero usar la sesión
app.use(session({
// Se recomienda cambiar en cada entorno
// https://parzibyte.me/blog/2020/06/02/sesiones-node-express-js/#Configurar_uso_de_sesion
secret: "123",
saveUninitialized: true,
resave: true,
cookie:{
maxAge: 60000,
}
}));
// Y después definir las rutas!
app.use('/', indexRouter);
app.use('/productos', productosRouter);
app.use('/usuarios', usuariosRouter);
Escribir datos en la sesión
Ahora en tus rutas de express configura todo normalmente. Supongamos que tienes la siguiente función para establecer datos en la sesión:
app.get("/guardar_en_sesión", (req, res) => {
req.session.nombre = "Luis";
req.session.edad = 23;
req.session.web = "https://parzibyte.me";
});
Como puedes ver definimos una función que configura esa ruta. El primer parámetro es la petición; justamente en session
podemos establecer todos los datos. En la práctica yo he establecido incluso arreglos.
Leer datos de sesión
Ahora para leer podemos acceder igualmente a session
y comprobar si hay un valor:
app.get("/ruta_solo_logueados", (req, res) => {
// Si, por ejemplo, no hay nombre
if(!req.session.nombre){
res.end("No tienes permiso. Fuera de aquí");
}else{
// Ok, el usuario tiene permiso
res.end("Hola " + req.session.nombre);
}
});
En resumen
Instalamos el paquete de express-session. Lo usamos al instanciar la app y lo configuramos con una clave secreta y aleatoria.
Para acceder a la sesión accedemos a req.session
en donde req
también es llamada petición o request. Así de simple; todo esto usando JavaScript del lado del cliente.
Nota importante: si estás usando fetch, por favor mira cómo configurarlo para que funcione con express.