Autenticación de administrador con teclado virtual y timeout de sesión
Una pantalla táctil industrial no tiene teclado físico, pero la página de ajustes de tu HMI sigue necesitando protección. Este ejemplo añade autenticación de administrador a un dashboard de Node-RED sobre una TouchBerry Pi: un popup con teclado en pantalla pide la contraseña, y un timeout de sesión configurable decide cuándo volver a pedirla. Procede de un despliegue real — una línea de mezclado industrial donde los operarios usan el panel todo el día pero solo los supervisores pueden cambiar parámetros.
Tres nodos function hacen todo el trabajo
Una función inicializa las credenciales y el timeout en el contexto global al desplegar. Una segunda se ejecuta cuando el operario toca "Ajustes": si el último login correcto es más reciente que adminLoginTimeout, deja pasar al usuario directamente; si no, abre el popup del teclado. La tercera valida la contraseña tecleada y sella lastAdminLoginDate si es correcta. Cada camino termina en un nodo ui-control que navega a la página protegida.
Timeout de sesión en lugar de pedir la contraseña sin parar
Pedir la contraseña en cada toque haría el panel inusable, sobre todo con guantes de trabajo. Guardar la marca de tiempo del login en el contexto global te da una sesión deslizante: cada acción autorizada la renueva, y tras diez minutos de inactividad (la variable adminLoginTimeout, totalmente configurable) el panel se bloquea solo discretamente. Un botón de logout opcional simplemente pone la marca de tiempo a null, útil cuando el supervisor se aleja de la máquina.
Mantén los secretos fuera del export del flujo
La contraseña vive en una variable global cargada desde una variable de entorno al desplegar, nunca hardcodeada en el JSON del flujo que inevitablemente exportarás, respaldarás y compartirás con compañeros. Los mensajes de error son deliberadamente vagos ("contraseña incorrecta", sin pistas sobre longitud ni caracteres), y la misma comprobación global de sesión la reutiliza cualquier otro flujo que la necesite — por ejemplo para proteger el botón de marcha forzada de la mezcladora.
Un fragmento de la implementación
Tal cual del ejemplo desplegado en el TouchBerry Pi — cópialo libremente:
global.set("adminPwd", env.get("ADMIN_PWD") || "CAMBIAR_PASSWORD");
global.set("adminLoginTimeout", 10 * 60 * 1000); // 10 minutes in ms
global.set("lastAdminLoginDate", null); // nobody logged in at startup
return msg;
// ============================================================
// function 2: validatePassword (receives msg from the virtual keyboard)
// ------------------------------------------------------------
// msg.payload == true -> the operator pressed OK
// msg.input -> text entered on the on-screen keyboard
// Output 1: access granted / Output 2: rejected
// ============================================================
if (msg.payload) {
if (msg.input == global.get("adminPwd")) {
// Access granted: record the instant for the session timeout
global.set("lastAdminLoginDate", new Date());
msg.auth = true;
msg.payload = "Administrator access granted";
return [msg, null];
}
// Incorrect password: do not reveal hints in the message
msg.auth = false;
msg.payload = "Incorrect password";
return [null, msg];
}
return [null, null]; // popup cancelled: do nothing
// ============================================================El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.
Preguntas frecuentes
¿Cómo añado un teclado en pantalla a un dashboard de Node-RED?
Usa un nodo ui-template con un input HTML más un teclado virtual, o activa un teclado a nivel de sistema operativo como matchbox-keyboard en Raspberry Pi OS para que aparezca al enfocar cualquier campo.
¿Puedo tener varios niveles de usuario en el dashboard de Node-RED?
Sí. Guarda una marca de tiempo por rol (operario, supervisor, admin) en el contexto global y comprueba la que corresponda en cada flujo protegido.
¿Sustituye esto a securizar el editor de Node-RED?
No. Esto protege páginas del dashboard para los operarios. El propio editor debe securizarse aparte con adminAuth y HTTPS en settings.js.