La autenticación de usuarios en Node.js se puede lograr utilizando diferentes bibliotecas y tecnologías. Aquí hay un enfoque general utilizando el módulo `passport` por Jesús Cuesta Arza.
1. Instalar los módulos necesarios
– `npm install express express-session express-flash passport passport-local mongoose ejs bcrypt mongoose-findorcreate connect-flash express-ejs-layouts`2. Configurar Express y Passport
```js
//Inclusión de módulos
const express = require(‘express’);
const session = require(‘express-session’);
const passport = require(‘passport’);
const LocalStrategy = require(‘passport-local’).Strategy;
// Inicializamos la aplicación
let app = express();
// Configuramos Passport para usar autenticación local
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
```
3. Sesiones de Passport
– Passport utiliza sesiones para mantener el estado de autenticación entre las solicitudes.```js
// Configuramos Passport para manejar sesiones
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
```
4. Middleware de Passport y Express
– Para que Passport pueda autenticar solicitudes, debes utilizar el middleware de autenticación proporcionado. – Necesitas configurar Express para usar sesiones, ahora con `express-session`.```js
const session = require(‘express-session’);
app.use(session({ secret: ‘tu_secreto’, resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
```
5. Rutas de Autenticación
```js
app.post(‘/login’,
passport.authenticate(‘local’, { successRedirect: ‘/’,
failureRedirect: ‘/login’,
failureFlash: true })
);
```
6. Hashear contraseñas
– Cuando almacenes contraseñas, nunca debes almacenarlas en texto plano. En su lugar, debes “hashear” las contraseñas y comparar el hash.```js
const bcrypt = require(‘bcrypt’);
const saltRounds = 10;
const plainPassword = ‘password’;
bcrypt.hash(plainPassword, saltRounds, function(err, hashedPassword) {
// Ahora puedes guardar la contraseña hasheada en la bd
});
```
Para validar la contraseña entrante de un usuario:
```js
bcrypt.compare(plainPassword, hashedPassword, function(err, result) {
// result == true si coincide con la hashedPassword
});
```
Adicionalmente para validar el formulario de registro necesitarías:
- Validar que el nombre de usuario no esté vacío.
- Comprobar que el nombre de usuario no esté ya registrado.
- Validar que la contraseña tenga al menos el mínimo de caracteres que hayas establecido.
Estos son los pasos básicos para autenticar usuarios en Node.js usando Passport. Existen muchas otras opciones y funciones avanzadas que puedes explorar en la documentación oficial de Passport.js.