La implementación de sistemas de autenticación en una aplicación Express.js puede variar dependiendo de los requisitos específicos de tu aplicación. Sin embargo, aquí te mostraré un enfoque general para implementar la autenticación utilizando el método de autenticación basado en sesiones con Express.js y Passport.js, que es una biblioteca de autenticación flexible para Node.js.
Paso 1: Instalación de Passport.js y dependencias:
Instala Passport.js y las
estrategias de autenticación que necesites, como passport-local
para
la autenticación local con nombre de usuario y contraseña,
o passport-jwt
para
la autenticación basada en JWT (JSON Web Tokens).
npm install passport passport-local passport-jwt bcryptjs
Paso 2: Configuración de Passport.js en tu aplicación:
En tu archivo de aplicación (por
ejemplo, app.js
),
configura Passport.js para manejar la autenticación.
const express = require('express'); const session = require('express-session'); const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; const bcrypt = require('bcryptjs'); const app = express(); // Configurar sesión app.use(session({ secret: 'secreto', // Cambiar por una cadena segura resave: false, saveUninitialized: false })); // Inicializar Passport y sesión app.use(passport.initialize()); app.use(passport.session()); // Configurar estrategia de autenticación local passport.use(new LocalStrategy({ usernameField: 'email', // Campo utilizado para el nombre de usuario passwordField: 'password' // Campo utilizado para la contraseña }, async (email, password, done) => { try { // Buscar usuario en la base de datos por email const usuario = await Usuario.findOne({ email }); // Si el usuario no existe o la contraseña no coincide, devolver falso if (!usuario || !bcrypt.compareSync(password, usuario.password)) { return done(null, false); } // Si la contraseña coincide, devolver el usuario return done(null, usuario); } catch (error) { return done(error); } })); // Serializar y deserializar usuario para almacenarlo en sesión passport.serializeUser((usuario, done) => { done(null, usuario.id); }); passport.deserializeUser(async (id, done) => { try { const usuario = await Usuario.findById(id); done(null, usuario); } catch (error) { done(error); } }); // Resto de la configuración de Express y rutas...
Paso 3: Creación de rutas de autenticación:
Crea rutas para la autenticación, como inicio de sesión, cierre de sesión y registro de usuario.
// Ruta de inicio de sesión app.post('/login', passport.authenticate('local', { successRedirect: '/inicio', // Redirigir al usuario después de iniciar sesión correctamente failureRedirect: '/login', // Redirigir al usuario si la autenticación falla failureFlash: true // Mostrar mensajes de error si la autenticación falla })); // Ruta de cierre de sesión app.get('/logout', (req, res) => { req.logout(); res.redirect('/login'); }); // Ruta de registro de usuario app.post('/registro', async (req, res) => { try { // Crear un nuevo usuario en la base de datos const nuevoUsuario = new Usuario({ email: req.body.email, password: req.body.password }); await nuevoUsuario.save(); res.redirect('/login'); } catch (error) { console.error('Error al registrar usuario:', error); res.redirect('/registro'); } });
Paso 4: Protección de rutas:
Protege las rutas que requieran autenticación utilizando middleware personalizado.
// Middleware para verificar si el usuario está autenticado function verificarAutenticacion(req, res, next) { if (req.isAuthenticated()) { return next(); // Si el usuario está autenticado, continuar } res.redirect('/login'); // Si el usuario no está autenticado, redirigir al inicio de sesión } // Ruta protegida que requiere autenticación app.get('/ruta-protegida', verificarAutenticacion, (req, res) => { res.send('Ruta protegida'); });
Con estos pasos, has implementado un sistema de autenticación básico en tu aplicación Express.js utilizando Passport.js. Recuerda personalizar este código según las necesidades específicas de tu aplicación y considerar aspectos de seguridad adicionales, como la gestión de sesiones, la protección contra ataques de fuerza bruta y la implementación de medidas de seguridad adicionales.
0 Comments:
Publicar un comentario