> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Escriba código de Actions claro, conciso y seguro con nuestras pautas de codificación.

# Pautas de codificación para Actions

Siga las pautas a continuación para escribir código de Actions eficiente, seguro y claro en un entorno de producción optimizado.

<div id="actions-basics">
  ## Conceptos básicos de Actions
</div>

* Use la menor cantidad posible de solicitudes HTTP y establezca un tiempo de espera razonable (menos de 10 segundos) para evitar que se acumulen solicitudes durante el inicio de sesión.
* Use [metadatos de la aplicación](/es/docs/get-started/applications/configure-application-metadata) para filtrar aplicaciones específicas y determinar si debe ejecutarse una Action.

  * Ejemplo: valores específicos de la aplicación o valores de agrupación de aplicaciones para variar parcial o totalmente la ejecución de la Action.
* Use `user_metadata`/`app_metadata` para conservar datos personalizados en el perfil del usuario.

  * Ejemplo: preferencias del usuario o valores de estado.
* Use [metadatos de transacción](/es/docs/customize/actions/transaction-metadata) para compartir datos entre [triggers de post-login](/es/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger) durante la misma ejecución.

  * Ejemplo: valores recuperados de servicios externos o calculados que deben reutilizarse en Actions posteriores y que están relacionados con la ejecución actual.
* Use la caché para datos que deban compartirse entre Actions de distintas ejecuciones.

  * Ejemplo: valores recuperados de servicios externos o calculados que deben reutilizarse en Actions y que no están relacionados con el usuario ni con la ejecución actual específica.
* Asegúrese de que las Actions que proporcionan verificación o activan <Tooltip tip="Autenticación multifactor (MFA): proceso de autenticación del usuario que utiliza un factor además del username y la contraseña, como un code por SMS." cta="Ver glosario" href="/es/docs/glossary?term=MFA">MFA</Tooltip> no puedan omitirse de forma accidental o maliciosa.
* Las Actions nunca deben generar un error de forma intencionada; si los procesos se detienen debido a un error o una condición, use el método `api` adecuado, como `api.access.deny()`.
* Use `event.request.hostname` para el dominio utilizado en las llamadas a la Authentication API; puede ser el dominio predeterminado del inquilino de Auth0 o un [dominio personalizado](/es/docs/customize/custom-domains).

<div id="actions-modules">
  ## Módulos de Actions
</div>

* Use módulos de Actions cuando necesite reutilizar funciones en distintas Actions y evitar la redundancia de código.
* Siempre que sea posible, ahorre tiempo de instanciación de objetos implementando el [patrón Singleton](https://en.wikipedia.org/wiki/Singleton_pattern) para reutilizar instancias de objetos en el módulo de Actions.
* Siga las directrices aplicables de este documento en materia de codificación, seguridad, registro, dependencias y datos de usuario.
* Al usar un módulo de Actions desde una Action, tenga siempre presente la versión del módulo que se está utilizando.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Cuando publica una nueva versión de un módulo de Actions, Auth0 no actualiza automáticamente la versión a la que hacen referencia las Actions, lo que evita posibles fallos si la actualización no es compatible con la Action.
</Callout>

<div id="coding-basics">
  ## Conceptos básicos de programación
</div>

* Compruebe la igualdad estricta `===` en todos los datos entrantes o almacenados.
* Use una instrucción `return` cuando el proceso de la Action deba detenerse.
* Ejecute un linter, como [ESLint](https://eslint.org), y un analizador, como [Semgrep](https://semgrep.dev/docs/getting-started/), para mejorar la calidad del código y detectar problemas automáticamente.

<div id="security-basics">
  ## Conceptos básicos de seguridad
</div>

* No escriba secretos ni artefactos de código confidenciales en texto sin formato como parte de su código de Actions. En su lugar, use el [Secrets Manager](/es/docs/customize/actions/write-your-first-action#add-a-secret) o integre su propio gestor dentro del código de Actions.
* No transmita información de identificación personal (PII) sin cifrar y visible, por ejemplo, en URL o mensajes de error.
* Use siempre URL con HTTPS para las redirecciones y las llamadas a la API.
* Incluya las direcciones IP en una lista de permitidos cuando sea posible.
* Preste atención a los datos entrantes que puedan ser manipulados (parámetros de URL, agente de usuario, etc.).

<div id="defensive-coding">
  ## Programación defensiva
</div>

* [Detecte los errores](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#exception_handling_statements) y trátelos según sea necesario.
* Use cláusulas de guarda y salga anticipadamente si el procesamiento de la Action no debe continuar.

<div id="logging">
  ## Registro
</div>

* Nunca registres datos confidenciales, secretos ni PII.
* No superes el máximo de 256 caracteres registrados por Action.

<div id="dependencies">
  ## Dependencias
</div>

* Utilice paquetes confiables y con mantenimiento activo.
* Compruebe si hay CVE pendientes con [la función de auditoría de `npm`](https://docs.npmjs.com/cli/v6/commands/npm-audit) o con un verificador automatizado de dependencias conectado a un repositorio.
* Utilice la versión más reciente de un paquete cuando sea posible.

<div id="user-data">
  ## Datos de usuario
</div>

* Compruebe si un correo electrónico está verificado con `event.user.email_verified` si se utiliza en un contexto sensible o de alta seguridad.
* Las distintas conexiones proporcionan datos de perfil de usuario diferentes; el único [campo del perfil de usuario](/es/docs/manage-users/user-accounts/user-profiles/user-profile-structure) garantizado es `user_id`.

<div id="redirect-actions-in-the-login-flow">
  ## Actions de redirección en el flujo de inicio de sesión
</div>

* El token que devuelve `api.redirect.encodeToken` está firmado, pero no cifrado, por lo que no se deben incluir datos confidenciales ni información de identificación personal (PII) en la carga útil.
* El flujo de inicio de sesión se ejecuta después de que el inicio de sesión se complete correctamente, lo que incluye:

  * SSO (no se muestra ningún formulario de inicio de sesión)
  * autenticación silenciosa (comprobación de una sesión mediante `prompt=none` en la URL de autorización)
  * intercambio de Token de actualización (sin interacción del usuario)
  * concesiones de contraseña RO (las credenciales se recopilan desde una aplicación y se intercambian con el endpoint de token)
* Las Actions que redirigen deben tener en cuenta los casos anteriores y denegar el acceso si se requiere interacción, o permitir intencionadamente la omisión, con lo que la responsabilidad recae en la aplicación que solicita el inicio de sesión.
