🗝 Clase #10: Generar JWT en el servicio 10/20 🗝
Pasos: 📝
- Vamos a implementar la lógica para que cuando se haga login, tengamos el
token. Para ello en VSC, en la carpeta routes, abrimos el archivo auth.router.js, el código queda:
const express = require('express');
const passport = require('passport');
const jwt = require('jsonwebtoken');
//Traemos el config para el jwtSecret
const { config } = require('./../config/config');
const router = express.Router();
router.post('/login',
passport.authenticate('local', {session: false}),
//Al pasar la capa de autenticación después de verificar que el usuario y password son correctos
//al devolver el login, se le brinda un token
async (req, res, next) => {
try {
const user = req.user;
const payload = {
sub: user.id,
role: user.role
}
//Se hace la firma
const token = jwt.sign(payload, config.jwtSecret);
res.json({
user,
token
});
} catch (error) {
next(error);
}
}
);
module.exports = router;
Guardamos, vamos a la carpeta config y abrimos el archivo config.js y después de apiKey colocamos:
jwtSecret: process.env.JWT_SECRET,
Guardamos, abrimos la página para generar claves (enlace: aquí), para ésta clase se buscó: WEP 256-bit Key, se generó en la pestaña ++NEW++ y luego al dar en la pestaña ++COPY++, aparece un cuadro donde indica que al presionar las teclas Ctrl + C se copia la clave generada.
Esa clave se copia y se pega en el archivo de variables de entorno .env después de API_KEY se coloca el JWT_SECRET, para mi ejemplo:
JWT_SECRET=csvV9KYB4QeqhaEgoJdIzwunROb1XDZU
Guardamos, como se modificó el archivo .env con las variables de entorno, en la terminal se corre de nuevo:
npm run dev
Vamos a Insomia y en la carpeta de Auth en Login, la solicitud del ++POST++ con la dirección: _.API_URL/api/v1/auth/login
En el body JSON:
{
"email": "superadmin@mail.com",
"password": "12356 .2020",
"role": "admin"
}
Al enviar la petición debe salir el código 200 OK:
{
"user": {
"id": 3,
"email": "superadmin@mail.com",
"role": "admin",
"createdAt": "2023-03-17T02:47:32.524Z"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjMsInJvbGUiOiJhZG1pbiIsImlhdCI6MTY3OTUzNjc4MH0.ivIhrTTJreKyEFvFWJbRBJ_eLEItoIgH5HlWSVLOESw"
}