Cuando su aplicación web necesita "recordar" a los usuarios, normalmente utiliza uno de dos mecanismos: cookies o sesiones. Una cookie es una pequeña área de almacenamiento en el navegador donde puede guardar datos relacionados con el usuario, como las preferencias de búsqueda, por ejemplo. Las sesiones le permiten almacenar información confidencial en el servidor.

Descubra cómo configurar sesiones en un servidor Express con tecnología de Node.js.

Lo que necesitarás

Para seguir este tutorial, necesita tener instalados Node.js y npm. Cualquier versión reciente de Nodo.js debería venir con npm, un administrador de paquetes para instalar dependencias.

Usará npm para instalar Express y express-session. Estas son las herramientas que usará para crear el servidor web y la sesión.

¿Qué es una sesión en Node.js?

Una cookie es un pequeño archivo que su navegador utiliza para almacenar datos. Puede utilizar cookies para almacenar datos no confidenciales, como preferencias de búsqueda.

No debe almacenar datos confidenciales (como nombres de usuario y contraseñas) en cookies. Cuando su navegador envía cookies a través de HTTP, son vulnerables a los piratas informáticos que pueden interceptarlos. También se almacenan en texto sin formato en su computadora, por lo que los piratas informáticos pueden inspeccionarlos y robar sus datos.

instagram viewer

En lugar de guardar datos confidenciales como una cookie en el cliente, debe almacenarlos en el servidor. Esto lo mantiene protegido del mundo exterior.

Las sesiones le permiten almacenar datos confidenciales que su aplicación necesita para identificar al usuario. Algunos ejemplos son nombre de usuario, contraseña y correo electrónico. Son más seguros porque viven en el servidor, no en el cliente.

Cada vez que tenga datos que desee conservar entre solicitudes, guárdelos en el lado del servidor mediante una sesión. Aprenderá cómo crear una sesión en la siguiente sección.

Creación de una sesión en un servidor Express

Express es un marco web popular para Node.js. Le permite configurar una aplicación de servidor web que escucha las solicitudes de los clientes en el número de puerto elegido. Puede crear rutas API, aplicar middleware e incluso conectar la aplicación a una base de datos, todo gracias a las API proporcionadas por el marco.

1. Crear un proyecto de Node.js

Cree una nueva carpeta para su proyecto, luego inicie su herramienta de línea de comandos y cd en esa carpeta.

A continuación, ejecute el siguiente comando para inicializar un proyecto de Node.js:

npm inicializar -y

Esto genera un archivo package.json en la carpeta raíz del proyecto con la configuración predeterminada. El archivo package.json para ejecutar guiones npm.

2. Instale Express y express-session

Utilizará Express para crear la aplicación de servidor web. Y express-session para crear sesiones en esa aplicación de servidor.

En la terminal, ejecute el siguiente comando para instalar ambas dependencias:

npm i express sesión exprés

Después de instalar ambos paquetes, el siguiente paso sería crear el servidor.

3. Crear sesiones en la aplicación

Cree un archivo llamado App.js en la carpeta raíz de su proyecto e importe las dependencias:

constante expresar = requerir('expresar')
constante sesión = requerir('sesión rápida')
aplicación = expreso()

A continuación, registre el middleware de sesión. Pasar un objeto con el secreto property (para firmar la cookie sessionID) y la cookie.

aplicación.uso(
sesión({
secreto: "algún secreto",
Galleta: { MaxAge: 30000 },
guardar sin inicializar: FALSO,
})
);

Aquí establece la mayor edad de la sesión en 30 segundos (30000 milisegundos). Establecer saveUnitialized en falso es esencial si tiene un sistema de inicio de sesión. Si no lo hace, su servidor generará una nueva ID de sesión cada vez que el usuario envíe una solicitud.

A continuación, cree una ruta de inicio de sesión para cambiar la sesión. Cuando un usuario llega a esta ruta, espera que el cliente envíe el nombre de usuario y la contraseña en el cuerpo de la solicitud. Primero, accede a estos valores y verifica si existen (y si el usuario se ha autenticado):

aplicación.post("/acceso", (requerido, res) => {
constante { nombre de usuario, contraseña } = req.body;

si (usuario Contraseña) {
si (req.sesión.autenticada) {
res.json (sesión);
} demás {
si (contraseña "123") {
req.session.authenticated = verdadero;
req.sesión.usuario = { nombre de usuario };
res.json (req.sesión);
} demás {
res.status(403).json({ mensaje: "Malas credenciales" });
}
}
} demás {
res.status(403).json({ mensaje: "Malas credenciales" });
}
});

Con la primera declaración if, realiza una verificación ficticia. Esta verificación es para asegurarse de que solo proceda si el nombre de usuario y la contraseña están presentes.

A continuación, comprueba si el usuario ya está autenticado. Si es así, devuelva la sesión al cliente. De lo contrario, establezca la propiedad autenticada en verdadero y guarde el nombre de usuario en la sesión. Luego envíelo de vuelta al cliente.

Con el código anterior, el servidor recordará a cada usuario que envíe una solicitud al servidor. Esto se debe a que se han autenticado y han guardado sus detalles únicos (nombre de usuario y contraseña) en la sesión.

Inicie su servidor agregando el siguiente código en la parte inferior de App.js:

aplicación.escuchar(3000, () => {
consola.registro("El servidor se está ejecutando en el puerto 3000");
});

Para probar esta ruta, use un cliente API para enviar una solicitud a la ruta de inicio de sesión que creó. Asegúrese de enviar el nombre de usuario y la contraseña en el cuerpo de la solicitud. Así es como se vería su solicitud de API si usa Rest Client:

PUBLICAR http://localhost: 3000/iniciar sesión HTTP/1.1
Tipo de contenido: "aplicación/json"
{ nombre de usuario: "Kingsley", contraseña: "123"}

Si todo va bien, obtendrás el siguiente objeto:

{
"Galleta": {
"edad máxima original": 30000,
"Solo http": verdadero,
"camino": "/"
},
"autenticado": verdadero,
"usuario": {
"nombre de usuario": "Kingsley",
"contraseña": "123"
}
}

Con este código han pasado dos cosas. Primero, se ha autenticado en el servidor. En segundo lugar, la sesión ahora tiene sus datos de inicio de sesión, por lo que el servidor ahora sabe quién es usted. Cada vez que envíe una nueva solicitud, lo recordará hasta que la sesión expire y el servidor la elimine.

Las sesiones mejoran la experiencia del usuario

Las sesiones son una parte vital de las aplicaciones de Node.js. Esto se debe a que le permiten mantener un estado de interacción entre muchas solicitudes y respuestas. Las sesiones son especialmente importantes para las aplicaciones que necesitan que inicies sesión.

Use sesiones en su aplicación de back-end para realizar un seguimiento de los datos específicos del usuario. Un ejemplo de tales datos son los artículos que su usuario ha agregado a un carrito de compras.

Sin sesiones, tendría que mantener un almacén de datos separado para cada usuario en su aplicación. Esto sería ineficiente y aumentaría la complejidad de la aplicación.

Express.js simplifica las sesiones, el enrutamiento y más

Express.js es el marco web Node.js más popular actualmente en uso. Proporciona muchas herramientas y bibliotecas para crear aplicaciones de back-end, y la biblioteca de sesión rápida es solo una de ellas.

Si desea utilizar Node.js para el desarrollo web de back-end, consulte Express.