> ## 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.

> Aprenda a crear una conexión de base de datos.

# Crear conexiones de base de datos personalizadas

Si tiene su propia base de datos de usuarios, puede usarla como <Tooltip tip="Proveedor de identidad (IdP): servicio que almacena y administra identidades digitales." cta="Ver glosario" href="/es/docs/glossary?term=identity+provider">proveedor de identidad</Tooltip> en Auth0 para autenticar usuarios. Siga el proceso para crear la conexión de base de datos personalizada, crear scripts de acción de la base de datos y agregar parámetros de configuración.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Asegúrese de que su base de datos tenga los campos adecuados para almacenar [atributos del perfil de usuario](/es/docs/manage-users/user-accounts/user-profiles/user-profile-structure#user-profile-attributes), como `id`, `nickname`, `email` y `password`. Para obtener información sobre el esquema del perfil de usuario de Auth0, lea [Perfiles de usuario normalizados](/es/docs/manage-users/user-accounts/user-profiles/normalized-user-profiles). Para obtener más información sobre cómo actualizar perfiles de usuario, lea [Actualizar perfiles de usuario con su base de datos](/es/docs/manage-users/user-accounts/user-profiles/update-user-profiles-using-your-database).
</Callout>

Auth0 le permite crear conexiones y scripts para la mayoría de las bases de datos de uso común, incluidas:

* ASP.NET Identity
* MongoDB
* MySQL
* PostgreSQL
* SQLServer
* Windows Azure SQL Database
* Servicios web a los que se accede mediante Basic Auth

Puede conectarse a cualquier tipo de base de datos o servicio web con un script personalizado configurado correctamente. Tenga en cuenta que el saneamiento de las entradas debe realizarse de su lado; Auth0 no sanea ni valida ninguna combinación de username/password que pase una base de datos personalizada. Los scripts de Custom Database están sujetos a la [Política de límites de velocidad](/es/docs/troubleshoot/customer-support/operational-policies/rate-limit-policy) de Auth0.

<Card title="Firewall de red">
  Si está detrás de un firewall, es posible que esta función requiera que agregue las direcciones IP de Auth0 correspondientes a la lista de permitidos para que funcione correctamente.
</Card>

<div id="create-the-connection-in-the-auth0-dashboard">
  ## Cree la conexión en el Auth0 Dashboard
</div>

1. Vaya a [Auth0 Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database) y seleccione **Create DB Connection**.
2. Configure los ajustes de la conexión y seleccione **Create**:

| Parámetro                                             | Definición                                                                                                                                                                   |
| ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Nombre**                                            | El nombre de la conexión. El nombre debe comenzar y terminar con un carácter alfanumérico, contener solo caracteres alfanuméricos y guiones, y no superar los 35 caracteres. |
| **Choose one or more attributes as user identifiers** | Elija uno o más [atributos identificadores](/es/docs/authenticate/database-connections/activate-and-configure-attributes-for-flexible-identifiers) para la conexión.         |
| **Choose one or more authentication methods**         | Elija un método de autenticación para verificar la identidad de los usuarios.                                                                                                |
| **Use my own database**                               | Actívelo si tiene una base de datos que desea conectar con Auth0.                                                                                                            |
| **Disable Sign Ups**                                  | Impide que nuevos usuarios se registren desde endpoints públicos.                                                                                                            |
| **Promote Connection to Domain Level**                | Eleve esta conexión al nivel de dominio para usarla con aplicaciones de terceros.                                                                                            |

Una vez que Auth0 cree la conexión, tendrá las siguientes vistas (además de la vista **Settings**):

* Attributes
  * Authentication Methods
  * Custom Database
  * Applications

3. Seleccione la vista **Custom Database** y habilite el interruptor **Use my own database**.

   <Frame>
     <img src="https://mintcdn.com/translations/3nS3prIggmJG9TUI/docs/images/cdy7uua7fh8z/3kgHDpBFdVWNq9XOfhsTXI/2efa43e44793b8dd69b9f9e8b54bf752/2025-02-25_10-20-20.png?fit=max&auto=format&n=3nS3prIggmJG9TUI&q=85&s=7aabe24b2fa1559facd2651d06d2fcc2" alt="Habilite la opción Use my own database de Custom Database" width="680" height="259" data-path="docs/images/cdy7uua7fh8z/3kgHDpBFdVWNq9XOfhsTXI/2efa43e44793b8dd69b9f9e8b54bf752/2025-02-25_10-20-20.png" />
   </Frame>

<div id="create-database-action-scripts">
  ## Crear scripts de acción para la base de datos
</div>

Al activar el interruptor **Use my own database**, se habilita el área **Database Action Scripts**, donde crearás scripts para configurar cómo funciona la autenticación al usar tu base de datos. Puedes escribir tus propios scripts de acción para la base de datos o seleccionar una plantilla en el menú desplegable **Templates** y modificarla según sea necesario.

**Debes** configurar un script `login`; los scripts adicionales para funciones de usuario son opcionales.

Los scripts de acción para la base de datos disponibles son:

| Nombre                     | Descripción                                                                                                                 | Parámetros             |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| **Login**<br />Obligatorio | Se ejecuta cada vez que un usuario intenta iniciar sesión.                                                                  | `email`, `password`    |
| **Create**                 | Se ejecuta cuando un usuario se registra.                                                                                   | `user`                 |
| **Verify**                 | Se ejecuta después de que un usuario sigue el enlace de verificación.                                                       | `email`                |
| **Change Password**        | Se ejecuta cuando un usuario hace clic en el enlace de confirmación después de solicitar un restablecimiento de contraseña. | `email`, `newPassword` |
| **Get User**               | Recupera un perfil de usuario de tu base de datos sin autenticar al usuario.                                                | `email`                |
| **Delete**                 | Se ejecuta cuando se elimina un usuario mediante la API o Auth0 Dashboard.                                                  | `id`                   |

Para obtener más información sobre estos scripts, consulta [Custom Database Action Script Templates](/es/docs/authenticate/database-connections/custom-db/templates) y [Custom Database Action Script Execution Best Practices](/es/docs/authenticate/database-connections/custom-db/custom-database-connections-scripts/execution).

<div id="create-a-login-script">
  ### Crear un script de Login
</div>

<Card title="Evite colisiones de ID de usuario con múltiples bases de datos">
  Auth0 usará la propiedad `id` (o, alternativamente, `user_id`) del perfil de usuario devuelto para identificar al usuario.

  Si usa varias conexiones de base de datos personalizadas, el valor de `id` debe ser único en todas ellas para evitar colisiones de ID de usuario. Recomendamos anteponer al valor de `id` el nombre de la conexión (omitiendo los espacios en blanco). Para obtener más información sobre los ID de usuario, consulte [Identificar usuarios](/es/docs/manage-users/user-accounts/identify-users).
</Card>

En los siguientes pasos se usa un ejemplo de script de Login para una base de datos MySQL.

1. Después de activar el interruptor **Use my own database**, se habilita el área **Database Action Scripts**. Asegúrese de estar en la pestaña **Login**.
2. Use el menú desplegable **Templates** para seleccionar la plantilla de script para base de datos MySQL.

   ```javascript lines expandable theme={null}
   function login(email, password, callback) {
     var bcrypt = require('bcrypt');
     var mysql = require('mysql');
     var connection = mysql.createConnection({
       host: 'localhost',
       user: 'me',
       password: 'secret',
       database: 'mydb'
     });
     connection.connect();
     var query = "SELECT id, nickname, email, password " +
       "FROM users WHERE email = ?";
     connection.query(query, [email], function (err, results) {
       if (err) return callback(err);
       if (results.length === 0) return callback(new WrongUsernameOrPasswordError(email));
       var user = results[0];
       bcrypt.compare(password, user.password, function (err, isValid) {
         if (err) {
           callback(err);
         } else if (!isValid) {
           callback(new WrongUsernameOrPasswordError(email));
         } else {
           callback(null, {
             // Este prefijo (sustitúyalo por el nombre de su propia BD personalizada)
             // garantiza la unicidad entre distintas BD personalizadas si existe la
             // posibilidad de colisiones (por ejemplo, si el ID de usuario es una dirección de correo electrónico o un entero)
             id: 'MyConnection1|' + user.id.toString(),
             nickname: user.nickname,
             email: user.email
           });
         }
       });
     });
   }
   ```

   El script anterior se conecta a una base de datos MySQL y ejecuta una consulta para recuperar el primer usuario con `email == user.email`.
   Luego, con el método `bcrypt.compareSync`, valida que las contraseñas coincidan y, si la validación se realiza correctamente, devuelve un objeto que contiene la información del perfil del usuario, incluidos `id`, `nickname` y `email`.
   Este script asume que tiene una tabla `users` con estas columnas. El `id` que devuelve el script de Login se usa para construir el atributo de ID del perfil del usuario.
3. Seleccione **Save and Try**.
4. En la ventana modal emergente, introduzca su correo electrónico y contraseña, y haga clic en **Try**. Se mostrará un menú desplegable para seleccionar entre una lista de runtimes disponibles, con el runtime actual en la parte superior.

   <Frame>
     <img src="https://mintcdn.com/translations/c0RQ9V0YAcT0-8l5/docs/images/cdy7uua7fh8z/8uBGZhHYZwOcO19ljJNNp/ccd69d84fdbdff90dc779a6b1ea8a6fd/db-connection-try-login-script.png?fit=max&auto=format&n=c0RQ9V0YAcT0-8l5&q=85&s=ec2a8cb2d4ce996d1671554ebf503413" alt="Ventana modal para probar el script de Login." width="496" height="360" data-path="docs/images/cdy7uua7fh8z/8uBGZhHYZwOcO19ljJNNp/ccd69d84fdbdff90dc779a6b1ea8a6fd/db-connection-try-login-script.png" />
   </Frame>

Auth0 no usa las plantillas de script hasta que seleccione **Save** o **Try**. Esto es así incluso si solo modifica un script y no ha hecho cambios en ningún otro. Debe elegir **Save** al menos una vez para que todos los scripts queden configurados.

<div id="custom-database-support-for-organizations">
  ## Compatibilidad con bases de datos personalizadas para Organizaciones
</div>

Si usa conexiones de bases de datos personalizadas junto con Organizaciones, puede usar el parámetro `context` en la firma del script para poner a disposición de sus scripts de acción de base de datos personalizada detalles de la organización, como `id`, `name` y `metadata`. Los datos de la organización se pasan en el objeto de contexto cuando la acción asociada se produce en el contexto de una organización; por ejemplo, cuando un usuario se autentica en la pantalla de inicio de sesión de una organización, se pasa el script de acción de inicio de sesión. Para obtener más información, consulte [Conexiones de bases de datos](/es/docs/authenticate/database-connections).

<div id="enable-context-object">
  ### Habilitar el objeto de contexto
</div>

1. Vaya a [Auth0 Dashboard > Authentication > Database](https://manage.auth0.com/dashboard/us/#/connections/database/).
2. Seleccione su conexión de base de datos.
3. En la pestaña **Custom Database**, busque **Context objects in database scripts** y seleccione **Enable**.

   <Warning>
     Esta función no se puede desactivar una vez habilitada.
   </Warning>
4. En la pantalla de confirmación, seleccione **Confirm**.

<div id="use-organization-context">
  ### Usar el contexto de organización
</div>

Una vez que el objeto de contexto esté habilitado en Dashboard, puedes agregar un objeto `context` a tus scripts de acción de base de datos personalizados, insertado justo antes del parámetro callback. Cuando se activan eventos con contexto de organización, los datos correspondientes se ponen a disposición de tus scripts de acción de base de datos personalizados con el siguiente formato:

<Tabs>
  <Tab title="Login">
    ```json lines theme={null}
    {
        "organization": {
            "display_name": "My Organization",
            "id": "org_XXXXXX",
            "metadata": {
                "example": "value"
            },
            "name": "my-organization"
        }
    }
    ```
  </Tab>

  <Tab title="Crear">
    ```json lines theme={null}
    {
        "organization": {
            "display_name": "My Organization",
            "id": "org_XXXXXX",
            "metadata": {
                "example": "value"
            },
            "name": "my-organization"
        }
    }
    ```
  </Tab>

  <Tab title="Verificar">
    ```json lines theme={null}
    {
        "organization": {
            "display_name": "My Organization",
            "id": "org_XXXXXX",
            "metadata": {
                "example": "value"
            },
            "name": "my-organization"
        }
    }
    ```
  </Tab>

  <Tab title="Cambiar contraseña">
    ```json lines theme={null}
    {
        "organization": {
            "display_name": "My Organization",
            "id": "org_XXXXXX",
            "metadata": {
                "example": "value"
            },
            "name": "my-organization"
        }
    }
    ```
  </Tab>

  <Tab title="Obtener usuario">
    ```json lines theme={null}
    {
        "organization": {
            "display_name": "My Organization",
            "id": "org_XXXXXX",
            "metadata": {
                "example": "value"
            },
            "name": "my-organization"
        }
    }
    ```
  </Tab>

  <Tab title="Eliminar" />
</Tabs>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Se pasará siempre un contexto vacío al script `delete`.
</Callout>

<div id="add-configuration-parameters">
  ## Agregar parámetros de configuración
</div>

Puede almacenar parámetros, como las credenciales necesarias para conectarse a su base de datos, en la sección **Settings** situada debajo del editor de scripts. Estos estarán disponibles para todos sus scripts, y puede acceder a sus valores mediante el objeto `configuration` en los scripts de acción de base de datos (es decir, `configuration.MYSQL_PASSWORD`).

Use los parámetros agregados en sus scripts para configurar la conexión. Por ejemplo, puede agregar lo siguiente al script de Login de MySQL:

```javascript lines theme={null}
function login (username, password, callback) {
  var mysql = require('mysql');
  var connection = mysql.createConnection({
    host     : configuration.MYSQL_HOST,
    user     : 'me',
    password : configuration.MYSQL_PASSWORD,
    database : 'mydb'
  });
}
```

<div id="learn-more">
  ## Más información
</div>

* [Prácticas recomendadas para scripts de acción y de conexión de base de datos personalizada](/es/docs/authenticate/database-connections/custom-db/custom-database-connections-scripts)
* [Solución de problemas de bases de datos personalizadas](/es/docs/authenticate/database-connections/custom-db/error-handling)
* [Importar y exportar usuarios](/es/docs/manage-users/user-migration)
