Verificación de email con Auth0
Las Actions de Auth0 son funciones serverless que se ejecutan durante la cadena de autenticación. El trigger pre-user-registration se ejecuta antes de crear un usuario nuevo en Auth0, lo que lo convierte en el sitio perfecto para verificar direcciones de email con Mailbeam.
Requisitos previos
- Una cuenta de Auth0 con un tenant
- Una clave de API de Mailbeam (regístrate gratis)
Crea la Action
En el panel de Auth0 → Actions → Library, crea una Action nueva para el trigger Pre User Registration.
// Action de Auth0: pre-user-registration
exports.onExecutePreUserRegistration = async (event, api) => {
const email = event.user.email;
// Sáltala en los logins sociales (en esta fase no hay dirección de email)
if (!email) return;
const MAILBEAM_KEY = event.secrets.MAILBEAM_KEY;
const MIN_SCORE = 60;
try {
const response = await fetch("https://api.mailbeam.dev/v1/verify", {
method: "POST",
headers: {
Authorization: `Bearer ${MAILBEAM_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ email }),
});
if (!response.ok) {
// Error de la API: falla en abierto
console.log("[Mailbeam] la API no ha devuelto 200, fallando en abierto");
return;
}
const { valid, score, reason } = await response.json();
if (!valid || score < MIN_SCORE) {
const message = reason === "disposable_domain"
? "Usa una dirección de email permanente."
: "Escribe una dirección de email válida y alcanzable.";
api.access.deny("invalid_email", message);
}
} catch (err) {
// Error de red: falla en abierto
console.error("[Mailbeam] error de verificación:", err.message);
}
};Añade la clave de API como secreto
En el editor de la Action, ve a Secrets y añade:
| Nombre | Valor |
|---|---|
MAILBEAM_KEY | mb_live_xxxxxxxxxxxxxxxxxxxx |
Despliega y engancha
- Pulsa Deploy en el editor de la Action
- Ve a Actions → Flows → Pre User Registration
- Arrastra tu Action nueva al flujo
- Pulsa Apply
Prueba
// Pruébala desde la pestaña de testing de Actions de Auth0 con:
{
"user": {
"email": "temp@mailinator.com"
}
}
// Esperado: se llama a api.access.deny con el error "invalid_email"Cómo funciona api.access.deny
Cuando se llama a api.access.deny, Auth0 devuelve un error al cliente:
{
"error": "invalid_email",
"error_description": "Usa una dirección de email permanente."
}Tu frontend lo recibe dentro del callback de error de Auth0 y puede mostrárselo a la persona.
Buenas prácticas
- Falla siempre en abierto (vuelve sin llamar a
api.access.deny) ante errores de la API - Usa
event.secretspara la clave de API: nunca la escribas en el código - Registra los errores con
console.error: aparecen en los logs del tenant de Auth0