Skip to main content

Envíe los registros de errores a un servicio externo

Recomendamos enviar los registros de eventos de error a un servicio externo para obtener una mejor visibilidad y facilitar el diagnóstico de operaciones anómalas. Para conservar y analizar sus eventos de registro una vez finalizado el período de retención de registros incluido en su plan de suscripción, use Log Streaming de Auth0. Puede usar servicios como DataDog y AWS EventBridge. También ofrecemos la posibilidad de enviar registros a un servicio externo en nuestra sección de Log Streaming en Auth0 Marketplace.

Use objetos de error en Rules

Existen límites de tiempo sobre cuánto puede tardar en ejecutarse una Rule. Para obtener más información, consulte Prácticas recomendadas para la ejecución de scripts de Action de base de datos personalizada. Si no es posible (o probable) recuperarse de una condición de error dentro de ese período, debe devolverse explícitamente una condición de error; para ello, basta con completar la ejecución de la Rule devolviendo una instancia de un objeto Error de Node, como en: return callback(new Error('some description')); Para obtener más información, consulte Clase: Error en nodejs.org. Como alternativa, puede devolverse una instancia de UnauthorizedError, específico de Auth0, lo que hace que se devuelva a la aplicación que inició la autenticación una condición de error unauthorized con la descripción del error proporcionada; es decir, la aplicación desde la que se inició la redirección al endpoint /authorize. Esto permite que una aplicación ofrezca capacidad de reintento condicional y que implemente Rules para denegar el acceso en función de determinadas condiciones: return callback(new UnauthorizedError('some description'), user, context);

Use descripciones significativas para los códigos de error

El objeto UnauthorizedError solo devuelve la descripción proporcionada. Para aplicar un procesamiento específico a las condiciones de error de acceso no autorizado, te recomendamos dar formato a las descripciones para que incluyan información del código de error a la que se pueda acceder fácilmente, por ejemplo: '[00043] - mi descripción de error específica')

Manejo de excepciones

Las condiciones de error inesperadas, como las excepciones de JavaScript no capturadas, pueden provocar la finalización prematura de la ejecución del flujo, lo que en última instancia hará que se devuelva un error de autenticación. En situaciones que implican operaciones asíncronas, debe usar un controlador catch al trabajar con objetos Promise. El uso de objetos Promise también puede ser eficaz para manejar errores durante operaciones no asíncronas. Como se muestra a continuación, un objeto Promise puede usarse para encapsular, por ejemplo, una llamada síncrona a una función, lo que facilita la implementación del manejo de errores en cascada mediante el encadenamiento de promesas y técnicas similares. Para obtener más información sobre el objeto Promise, consulte Promise en MDN Web Docs. Para obtener más información sobre el encadenamiento de promesas, consulte Error Handling with Promises en javascript.info.
return new Promise(function(resolve, reject) {
    jwt.verify(
      token,
      secret,{
      clockTolerance: 5},
      function(err, decoded) {
        if (err) {
          reject(err);
        } else {
          resolve(decoded);
      }
    });
  });
Como alternativa, puede usar try...catch para manejar las excepciones de JavaScript que se producen durante una operación síncrona. Para obtener más información, consulte try...catch en MDN Web Docs.Configurar este tipo de control de excepciones suele tener un costo en el rendimiento, así que úselo con moderación; el rendimiento de una Rule debe ser lo más óptimo posible. Un enfoque más pragmático es implementar un procesamiento que evite que se produzcan excepciones, en lugar de gestionarlas una vez que ya se hayan producido. Para obtener más información sobre las prácticas recomendadas, consulte Prácticas recomendadas de rendimiento.

Evite los objetos no inicializados en Rules

Si utiliza objetos no inicializados, pueden producirse excepciones. Recomendamos incluir la inicialización como parte de cualquier declaración cuando la existencia de un objeto sea incierta. Por ejemplo: user.user_metadata = user.user_metadata || {}) En una Rule, tomar medidas para evitar que se produzca una excepción desde el principio es una práctica recomendada y, por lo general, resulta menos costoso en términos de rendimiento y uso de recursos que implementar el manejo de excepciones.