π©βπ»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 ySYSTEMUSER_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