ðŸ‘Đ‍ðŸ’ŧUser Management

User Managerment es un Modulo pensado para ofrecer todo un sistema de Inicio de Sesion con Login unico y vencimiento de Token junto con un espacio de permisos para trabajar con los Endpoints.

Setup

Para trabajar con UM tenga presente que utilizara SQLite y que esta DB se guardara en el directorio ~/db.

Para inicializar el sistema debe tenerlo habilitado en los .env

ENABLE_USERMANAGEMENT=true

Luego de ello, inicialice el mismo ejecutando

npm run setup:um

Esto inicializara la base de datos y le entregara las credenciales para poder iniciar sesion por consola:


Se creo la cuenta Admin de User Management 

Nombre de Usuario: administrator
Contrase;a: dec826ce993b83568e22698aa3cc459d

Con este, podra iniciar sesion y podra crear usuarios especificandoles premisos para poder trabajar en sus endpoints.

Modo de Uso

Para poder trabajar con este modulo, en su endpoint debe tener fun['userManagement'].authenticateToken en la cabecera de su ruta para que esta tenga validaciones de Token y vigencia. Por otro lado, puede obtener los datos de la session como Nombre del Usuario, Apellido, Token vinculante a la DB (unico por sesion y vinculante al JWT), userID en DB y los permisos.

"user": {
    "userid": 1,
    "name": "administrator",
    "lastname": "",
    "token": "8afc05f3-8e64-4b58-bb2f-f4b213f8a7a6",
    "permissions": {
        "createUsers": true
    },
    "iat": 1704295913,
    "exp": 1704299513
}
  • Estos datos, son visibles desde la variable req.user de cada ruta.

  • La vigencia de los JWT es de 365 dias por default, pero puede modificarlo en las .env indicando SYSTEMUSER_EXPIRE en true y SYSTEMUSER_EXPIRETIME con el tiempo que quiera, por ejemplo 30m para media hora, o 7d para una semana o 2h30m para dos horas y media.

  • Puede ver mas informacion aqui: https://jwt.io/introduction

  • Los token JWT de Session deven viajar en Authorization: Bearer para poder ser reconocidos por monoIntegrator

Un ejemplo de implementacion es el siguiente

router.all("/privada", fun['userManagement'].authenticateToken, (req, res) => {
    const { id, ip, uri, method } = trx(req);
    try {
      res.status(200).json({ id, ip, uri, method, user: req.user });
    } catch (err) {
      log("error", `Existe un inconveniente - ${id} :: ${ip} :: ${uri} :: ${method} :: ${err}`, "userManagement");
      res.status(500).json({ msg: "Existe un inconveniente en la solicitud", id });
    }
});
module.exports = router;

Last updated