Sesión es una abstracción creada para facilitar el trabajo con usuarios individuales. Se utiliza para identificar a los usuarios y permite distinguir uno de otro. Por ejemplo, la autenticación en los sitios web se construye sobre el mecanismo de sesión. En esta lección, discutiremos las sesiones en el contexto de JavaScript.
Cómo funcionan las sesiones
La sesión utiliza cookies para su trabajo. Para cada usuario se crea su propia cookie con un identificador especial que es difícil de replicar. Esto ocurre durante el primer acceso a la sesión. La cookie no se utiliza más, todos los datos se graban en la memoria de la aplicación principal:
Cookie: JSESSIONID=node01lywaspcyuggy15sok9tw6q9eh0.node0
Para trabajar con sesiones en Fastify necesitas conectar el paquete:
npm i @fastify/session
import session from '@fastify/session';
import fastifyCookie from '@fastify/cookie';
import fs from 'fs';
import path from 'path';
await app.register(fastifyCookie);
await app.register(session, {
secret: 'a secret with minimum length of 32 characters',
cookie: { secure: false },
});
Cuando conectas es necesario indicar la clave secreta de 32 caracteres.
El principio de trabajar con información en la sesión es muy similar a cómo trabaja con las cookies. Podemos agregar datos a la sesión y leerlos:
app.get('/increment', (req, res) => {
req.session.counter = req.session.counter || 0;
req.session.counter += 1;
});
Los datos agregados se almacenan en la sesión hasta que ocurre uno de los siguientes eventos:
- Se elimina la cookie.
- Expira el tiempo de vida de la cookie.
- Los datos de la sesión se eliminan en el back-end.
Cómo utilizar sesiones
Implementaremos un ejemplo simplificado de autenticación en el sitio.
La autenticación es un procedimiento de verificación de autenticidad, por ejemplo:
- Verificación de la autenticidad del usuario al comparar la contraseña ingresada con la almacenada en la base de datos de usuarios.
- Confirmación de la autenticidad de un correo electrónico mediante la verificación de la firma digital utilizando la clave pública del remitente.
- Verificación de la suma de control de un archivo para asegurar que coincida con la suma declarada por el autor del archivo.
❗ La autenticación no debe confundirse con la autorización (procedimiento para proporcionar derechos específicos a un sujeto) e identificación (procedimiento para reconocer a un sujeto por su identificador).
Analizaremos un ejemplo:
import encrypt from './encrypt.js;
app.post('/session', (req, res) => {
// ...
if (user.passwordDigest === encrypt(password)) {
req.session.userId = user.id;
// ...
}
// ...
});
Si las contraseñas coinciden, se establece el identificador del usuario en la sesión bajo una llave que luego se utilizará para verificar si el usuario está autenticado.
Toma en cuenta que en el ejemplo de arriba no se utiliza la contraseña en sí, sino su versión cifrada. Desde una perspectiva de seguridad, no se deben almacenar contraseñas en texto claro bajo ninguna circunstancia. Por lo tanto, cuando se crea un usuario, la contraseña se cifra de manera especial, y este cifrado es lo que se almacena. Durante el procedimiento de autenticación, la contraseña ingresada por el usuario se cifra de la misma manera que durante el registro, luego se comparan los hashes.
// encrypt.js
import crypto from 'crypto';
export default (text) => {
const hash = crypto.createHmac('sha512', 'salt');
hash.update(text);
return hash.digest('hex');
};
Trabajo independiente
Realiza todos los pasos del tutorial en tu computadora.
- Agrega autenticación a la aplicación.
- Haz un manejador para mostrar la forma de inicio de sesión y para el proceso de inicio de sesión en sí, haz una plantilla. No necesitas verificar la contraseña.
- Agrega un enlace a la página de inicio de sesión en la página principal.
- Ejecuta la aplicación y asegúrate de que todo funcione.
- Abre las herramientas de desarrollador en tu navegador, verifica qué cookies se están configurando.
- Encuentra la cookie
JSESSIONID. - Intenta borrarla.
- Sube los cambios a GitHub.
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.