TUTORIALES

Node.js nivel intermedio: Implementación de sistemas de autenticación

 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