Contenido del curso

Acciones vs Reglas en Auth0

Resumen

Las acciones en Auth0 son la forma moderna de personalizar flujos de autenticación con código JavaScript reutilizable. Aprenderás a implementar una acción que reemplaza el avatar del usuario por uno de Gravatar, comparándola con el enfoque tradicional de reglas para que entiendas cuándo usar cada una.

¿Qué son las acciones en Auth0 y en qué flujos se ejecutan?

Las acciones son fragmentos de código que se disparan en momentos específicos del ciclo de autenticación. A diferencia de las reglas, no viven solo en el login.

Desde el menú Actions > Flows puedes elegir entre varios disparadores [1:00]:

  • Login, cuando un usuario inicia sesión.
  • Machine to Machine, para autenticación entre servicios.
  • Pre User Registration, antes de registrar un usuario.
  • Post User Registration, después del registro.
  • Change Password, cuando se actualiza una contraseña.
  • Send Phone Message, al enviar un SMS.

¿Cuál es la diferencia entre reglas y acciones en Auth0? Las reglas solo corren en el flujo de login y se ejecutan siempre antes que las acciones. Las acciones funcionan en múltiples flujos y permiten orden granular arrastrando bloques en un diagrama visual.

¿Cómo se construye una acción personalizada paso a paso?

Dentro del flujo de Login creas una acción custom, eliges el runtime (Node 16 recomendado) y defines el trigger [1:45]. El editor que aparece es notablemente más potente que el de las reglas: incluye autocompletado, linting integrado, almacenamiento de secretos por acción y soporte para cualquier paquete público de npm.

¿Cómo accedo al usuario dentro de una acción?

La firma de la función expone solo dos objetos: event y api [3:00]. No existen user, context ni callback como en las reglas. Para leer el correo del usuario, accedes a event.user.email.

El ejemplo replica la lógica de Gravatar usada antes con reglas, pero con sintaxis moderna:

javascript const crypto = require('crypto');

exports.onExecutePostLogin = async (event, api) => { const [emailName, emailHost] = event.user.email.split('@'); let email = event.user.email;

if (emailName?.includes('+')) { const [name] = emailName.split('+'); email = ${name}@${emailHost}; }

if (email?.endsWith('@gmail.com')) { const hash = crypto.createHash('md5').update(email).digest('hex'); const gravatarUrl = https://gravatar.com/avatar/${hash}; api.idToken.setCustomClaim('picture', gravatarUrl); } };

Fíjate en dos detalles: el módulo crypto se importa fuera de la función como en código Node tradicional, y usas optional chaining (?.) y nullish coalescing, algo que las reglas no permiten por su versión antigua de Node [4:30].

¿Cómo modifico el ID token desde una acción?

Aquí está el cambio conceptual más importante. En las reglas mutabas directamente el objeto user.picture. En las acciones usas api.idToken.setCustomClaim('picture', valor) [6:15]. El objeto api expone métodos distintos según el flujo, porque cada flujo tiene capacidades diferentes.

¿Cómo pruebo y despliego una acción en Auth0?

El editor incluye un panel de pruebas con un event simulado que puedes editar. Cambias el correo del usuario de prueba, ejecutas la acción y revisas si hubo errores [7:30]. Si todo pasa, le das Deploy y luego arrastras la acción al diagrama del flujo.

Ese diagrama es la verdadera ventaja: puedes encadenar varias acciones en el orden exacto que quieras, una sobre otra, creando un pipeline de autenticación visual.

¿Las reglas y las acciones se pueden ejecutar a la vez? Sí, pero las reglas siempre corren primero. Si ambas hacen lo mismo, desactiva una para evitar trabajo duplicado. La recomendación oficial es resolver todo con acciones cuando sea posible.

¿Cuándo conviene usar reglas en lugar de acciones?

Las acciones son el camino moderno, pero tienen límites. Algunas integraciones muy específicas todavía se resuelven mejor en reglas porque ofrecen más libertad de edición sobre el objeto user y el context. Si te topas con un caso que las acciones no soportan, revisa si una regla cubre ese hueco.

Ventajas concretas de las acciones frente a reglas:

  • Acceso a cualquier paquete público de npm, sin la lista limitada de las reglas.
  • Runtime de Node moderno, con sintaxis ES actual.
  • Secretos almacenados por acción, no de forma global.
  • Editor con autocompletado y validación en tiempo real.
  • Ejecución en múltiples flujos, no solo en login.

Después de aplicar la acción y desactivar la regla equivalente, al iniciar sesión el avatar de Gravatar sigue cargando correctamente. Misma funcionalidad, código más limpio.

Reto: notificación a Slack en el registro de usuarios

Crea una acción personalizada que se dispare en el flujo Post User Registration y envíe una notificación a un canal de Slack cada vez que alguien se registre. Hay un artículo en el blog oficial de Auth0 que documenta el patrón con webhooks, así que el camino está trazado. ¿Cómo resolverías el manejo del webhook URL como secreto dentro de la acción? Cuéntame en los comentarios.