Implementación de Login
Clase 25 de 38 • Curso de Desarrollo de APIs con Sails.js
Resumen
¿Cómo se garantiza la seguridad al almacenar contraseñas?
El almacenamiento seguro de contraseñas es una de las principales preocupaciones al desarrollar aplicaciones que manejan datos de usuarios. En la clase pasada, se explicó la importancia de no guardar contraseñas en texto plano, sino en su versión cifrada. Así se protege cuando se accede a nuestra plataforma, asegurando que las contraseñas originales no puedan ser expuestas. Ahora aprenderemos a implementar un método de inicio de sesión (login) utilizando contraseñas cifradas.
¿Cómo implementar un método de inicio de sesión con autenticación?
El proceso de inicio de sesión requiere validar simultáneamente el correo electrónico y la contraseña cifrada del usuario, asegurando su autenticidad. Vamos a guiarnos por el siguiente procedimiento:
-
Configuración Inicial en Postman:
- Corregir cualquier error al configurar los parámetros de autenticación para no mostrarlos directamente en la URL.
- Cambiar dichos parámetros a la opción
form-data
en Postman.
-
Implementación del Login en el Código:
- Copiar y adaptar el código del registro de usuarios para reutilizar las validaciones necesarias.
- Eliminar partes no necesarias y conservar el método para verificar correo y contraseña cifrada.
-
Verificación de Existencia del Usuario:
- Utilizar
findOne
para buscar la existencia del usuario por correo.const user = await Users.findOne({ where: { email: req.body.email } }); if (!user) { return res.status(404).json({ error: 'User not found' }); }
- Utilizar
-
Comparación de Contraseñas:
- Comparar la contraseña proporcionada con la almacenada cifra.
const passwordMatch = await bcrypt.compare(req.body.password, user.password);
- Comparar la contraseña proporcionada con la almacenada cifra.
-
Aplicación del Operador Ternario:
- Utilizar un operador ternario para manejar la lógica de retorno, minimizando líneas de código.
passwordMatch ? res.status(200).json(user) : res.status(401).json({ error: 'Not authorized' });
- Utilizar un operador ternario para manejar la lógica de retorno, minimizando líneas de código.
¿Cómo manejar la unicidad de registros en la base de datos?
Inconvenientes como registros duplicados pueden surgir en las bases de datos. Examinemos cómo abordar esto:
- Definición de Restricciones de Unicidad:
- Ajustar el modelo de base de datos para mantener unicidad en correos electrónicos.
email: { type: String, unique: true }
- Ajustar el modelo de base de datos para mantener unicidad en correos electrónicos.
- Resolución de Errores por Entradas Duplicadas:
- En caso de errores al inicializar la base de datos, debido a registros preexistentes duplicados, elimínelos y reinicie la base de datos.
¿Qué cambios implementar para autenticar usuarios más allá del inicio de sesión?
Aunque el método básico de login es funcional, no es suficiente para operaciones que requieren autenticación continuada. La solución es implementar JSON Web Tokens (JWT).
- Uso de JSON Web Tokens (JWT):
- En lugar de devolver el objeto usuario completo, devuelve un token JWT que representa la sesión del usuario autenticado.
- Este token será enviado en posteriores solicitudes como prueba de la identidad del usuario, simplificando la autenticación en llamadas subsecuentes a la API, como crear, leer, modificar o eliminar datos.
Este enfoque modular y seguro no solo protege la información sensible de los usuarios, sino que también simplifica el manejo de la autenticación. En futuras clases, exploraremos cómo implementar JWT para sacar el máximo provecho de estas técnicas avanzadas de seguridad.