DEV Community

Cover image for Generar un JSON Web Token (JWT) en NodeJS
Roberto Morais
Roberto Morais

Posted on

Generar un JSON Web Token (JWT) en NodeJS

Hoy os traigo una publicación sobre el uso de JSON Web Token en uno de nuestros proyectos para generar, en la función de login, un token que se pueda validar posteriormente antes de hacer una acción, por ejemplo de actualizado de usuarios.

Utilizaremos esta tecnología porque utiliza el algoritmo de encriptación HS256 y además, para generar el token se basa en una semilla (seem) que nos podemos inventar o generar, sin la cual, no se puede descifrar la información que contiene el token. Todo esto hace que sea uno de los procesos más seguros de tokerizado.

Para ello vamos a instalar el paquete de node para jsonwebtoken con el siguiente comando:

npm install jsonwebtoken --save
Enter fullscreen mode Exit fullscreen mode

Después para usarlo en nuestro código, vale con importar el paquete y llamar a su función sign de la siguiente manera:

const jwt = require('jsonwebtoken');

let token = jwt.sign({
    infoUser
}, 'este-es-el-seed', {expiresIn: '48h'});
Enter fullscreen mode Exit fullscreen mode

El token que genera la siguiente función tendrá una duración de 48 horas, dos días, y utilizará la semilla este-es-el-seed para encriptar la información de usuario.

Si quieres usarlo en una función login podría ser algo así:

const express = require('express');
// Usamos bcrypt para comprobar la contraseña
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
// Importamos el modelo de usuario de otro fichero
const User = require('./models/User');
const app = express();

app.post('/login', (req, res) =>{

    let body = req.body;

    User.findOne({email: body.email}, (err, user) => {
        if(err){
            return res.status(500).json({
               ok: false,
               err  
            });
        }

        if(!user){
            return res.status(400).json({
                ok: false,
                err: {
                    message: 'Usuario o contraseña incrorrectos'
                }
            });
        }

        if(!bcrypt.compareSync(body.password, user.password)){
            return res.status(400).json({
                ok: false,
                err: {
                    message: 'Usuario o contraseña incrorrectos'
                }
            });
        }

        let token = jwt.sign({
            user
        }, 'este-es-el-seed', {expiresIn: '48h'});

        res.json({
            ok: true,
            user,
            token
        });

    });
});
Enter fullscreen mode Exit fullscreen mode

En la respuesta correcta de la función de login, nuestro servidor de NodeJS va a devolver la información de nuestro usuario, que la habremos definido previamente en nuestro modelo, y el token. La capa frontend ya puede guardar ese token como variable local de navegador y deberá mandarlo con el resto de peticiones para validar que el usuario creado puede ejecutar esas funciones.

Top comments (2)

Collapse
 
yeasin72 profile image
Md Yeasin Arafath

I need a help

Collapse
 
fuenrob profile image
Roberto Morais

How can I help you?