Trabajar con rutas en ExpressJS es una parte esencial del desarrollo de API en NodeJS. En este capítulo, nos centraremos específicamente en las rutas de autenticación, un componente crucial para la seguridad y funcionalidad de cualquier aplicación.
ExpressJS es un marco para NodeJS que proporciona una forma sencilla y sólida de crear servidores web. Una de las características más poderosas de ExpressJS es su sistema de enrutamiento. Las rutas son la forma en que el servidor responde a solicitudes específicas de los clientes. En la práctica, define rutas a diferentes URL y diferentes métodos HTTP (GET, POST, DELETE, etc.) y luego define qué debe hacer el servidor cuando se reciben estas solicitudes.
Las rutas de autenticación son un tipo especial de ruta que se utilizan para verificar la identidad de un usuario. Estas rutas generalmente requieren que el usuario proporcione algún tipo de credencial, como un nombre de usuario y contraseña, y luego el servidor verifica que esas credenciales sean válidas. Si es así, el servidor puede proporcionar al usuario un token de autenticación, que luego el usuario puede utilizar para realizar solicitudes autenticadas a otras rutas.
Para comenzar a trabajar con rutas de autenticación, primero necesitamos instalar algunos paquetes adicionales. 'bcrypt' es un paquete que nos permite cifrar contraseñas, lo cual es una práctica de seguridad esencial. 'jsonwebtoken' es un paquete que nos permite crear y verificar tokens de autenticación. Puede instalar estos paquetes usando npm, el administrador de paquetes de NodeJS.
npm instala bcrypt jsonwebtoken
Una vez instalados estos paquetes, podemos comenzar a crear nuestra ruta de autenticación. Comencemos definiendo una nueva ruta POST para '/auth'. Esta ruta se utilizará para autenticar a los usuarios. En esta ruta, primero comprobaremos si el usuario ha proporcionado un nombre de usuario y contraseña. Si no, devolveremos un error. Si es así, verifiquemos si esas credenciales son válidas.
const expresar = requerir('expresar'); const bcrypt = requerir('bcrypt'); const jwt = require('jsonwebtoken'); enrutador constante = express.Router(); enrutador.post('/auth', async (req, res) => { const {nombre de usuario, contraseña} = req.body; if (!nombre de usuario || !contraseña) { return res.status(400).json({ error: 'Se requieren nombre de usuario y contraseña' }); } //Comprueba si las credenciales son válidas... });
Para verificar que las credenciales sean válidas, primero debemos recuperar el usuario de nuestra base de datos. Si el usuario no existe, devolvemos un error. Si el usuario existe, usamos bcrypt para comparar la contraseña proporcionada con la contraseña cifrada almacenada en la base de datos. Si la contraseña es válida, creamos un token de autenticación usando jsonwebtoken y se lo devolvemos al usuario.
//Comprueba si las credenciales son válidas... usuario constante = espera User.findOne ({ nombre de usuario }); si (!usuario) { return res.status(400).json({ error: 'Nombre de usuario o contraseña no válidos' }); } const validPassword = await bcrypt.compare(contraseña, usuario.contraseña); si (!contraseña válida) { return res.status(400).json({ error: 'Nombre de usuario o contraseña no válidos' }); } const token = jwt.sign({ id: user._id }, 'secreto', { expiresIn: '1h' }); res.json({token});
Esta es la base para trabajar con rutas de autenticación en ExpressJS. Sin embargo, hay muchos otros detalles que quizás desee considerar, como el manejo de tokens de actualización, el bloqueo de rutas con middleware de autenticación, etc. Sin embargo, espero que esta introducción le haya brindado una buena descripción general del proceso y lo haya animado a explorar el tema más a fondo.