

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Migración del desencadenador de Lambda del usuario
<a name="user-pool-lambda-migrate-user"></a>

Amazon Cognito llama a este desencadenador si un usuario no aparece en el grupo de usuarios en el momento del inicio de sesión con una contraseña o en el flujo de recuperación de contraseñas olvidadas. Cuando la función de Lambda finaliza responde con éxito, Amazon Cognito crea el usuario en el grupo de usuarios. Para obtener información detallada sobre el flujo de autenticación con el desencadenador de Lambda para migrar usuarios, consulte [Importación de usuarios con un desencadenador de Lambda para la migración de usuarios](cognito-user-pools-import-using-lambda.md).

Con este desencadenador de Lambda, se pueden migrar usuarios desde el directorio de usuarios actual a grupos de usuarios de Amazon Cognito en el momento del inicio de sesión o durante el flujo de recuperación de contraseñas olvidadas.

**Topics**
+ [Fuentes del desencadenador de Lambda para migrar usuarios](#user-pool-lambda-migrate-user-trigger-source)
+ [Parámetros del desencadenador de Lambda para migrar usuarios](#cognito-user-pools-lambda-trigger-syntax-user-migration)
+ [Ejemplo: Migrar un usuario con una contraseña existente](#aws-lambda-triggers-user-migration-example-1)
+ [Solución de problemas del desencadenante de la migración del usuario](#user-pool-lambda-migrate-user-troubleshooting)

## Fuentes del desencadenador de Lambda para migrar usuarios
<a name="user-pool-lambda-migrate-user-trigger-source"></a>


| Valor de triggerSource | Event | 
| --- | --- | 
| UserMigration\_Authentication[1](#cognito-migrate-user-passwordless-note) | Migración de usuarios al iniciar sesión. | 
| UserMigration\_ForgotPassword | Migración de usuarios durante el flujo de recuperación de contraseñas olvidadas. | 

1 Amazon Cognito no invoca este desencadenador cuando los usuarios se autentican con un [inicio de sesión sin contraseña.](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)

## Parámetros del desencadenador de Lambda para migrar usuarios
<a name="cognito-user-pools-lambda-trigger-syntax-user-migration"></a>

La solicitud que Amazon Cognito envía a esta función de Lambda es una combinación de los parámetros que se indican a continuación y los [parámetros comunes](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que Amazon Cognito agrega a todas las solicitudes.

------
#### [ JSON ]

```
{
    "userName": "{{string}}",
    "request": {
        "password": "{{string}}",
        "validationData": {
            "{{string}}": "{{string}}",
            . . .
        },
        "clientMetadata": {
            "{{string}}": "{{string}}",
      	. . .
        }
    },
    "response": {
        "userAttributes": {
            "{{string}}": "{{string}}",
            . . .
        },
        "finalUserStatus": "{{string}}",
        "messageAction": "{{string}}",
        "desiredDeliveryMediums": [ "{{string}}", . . .],
        "forceAliasCreation": {{boolean}},
        "enableSMSMFA": {{boolean}}
    }
}
```

------

### Parámetros de la solicitud para la migración de usuarios
<a name="cognito-user-pools-lambda-trigger-syntax-user-migration-request"></a>

**userName**  
Nombre de usuario que ingresa el usuario al iniciar sesión.

**contraseña**  
Contraseña que ingresa el usuario al iniciar sesión. Amazon Cognito no envía este valor en una solicitud iniciada por un flujo de recuperación de contraseñas olvidadas.

**validationData**  
Uno o varios pares de clave-valor que contienen los datos de validación de la solicitud de inicio de sesión del usuario. Para pasar estos datos a la función Lambda, puede usar el ClientMetadata parámetro en las acciones [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)y de la [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)API.

**clientMetadata**  
Uno o varios pares de clave-valor que puede proporcionar como datos de entrada personalizados a la función de Lambda para el desencadenador para migrar usuarios. Para pasar estos datos a la función Lambda, puede usar el ClientMetadata parámetro en las acciones [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)y de la [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)API.

### Parámetros de la respuesta para la migración de usuarios
<a name="cognito-user-pools-lambda-trigger-syntax-user-migration-response"></a>

**userAttributes**  
Este campo es obligatorio.   
Este campo debe contener uno o varios pares de nombre-valor que Amazon Cognito almacena en el perfil del usuario del grupo de usuarios y utiliza como atributos del usuario. Puede incluir atributos de usuario estándar y personalizados. Los atributos personalizados deben tener el prefijo `custom:` para distinguirlos de los atributos estándar. Para obtener más información, consulte [Atributos personalizados](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-custom-attributes.html).  
Para que los usuarios puedan restablecer sus contraseñas en el flujo de recuperación de contraseñas olvidadas, deben disponer de una dirección de correo electrónico o un número de teléfono verificados. Amazon Cognito envía un mensaje con el código de restablecimiento de la contraseña a la dirección de correo electrónico o al número de teléfono de los atributos del usuario. 


<table>
<thead>
  <tr><th>Atributos</th><th>Requisito</th></tr>
</thead>
<tbody>
  <tr><td>Todos los atributos que ha marcado como obligatorios al crear el grupo de usuarios</td><td>Si faltan atributos obligatorios durante la migración, Amazon Cognito usará los valores predeterminados.</td></tr>
  <tr><td><code>username</code></td><td>Es obligatorio si ha configurado su grupo de usuarios con atributos de alias además del nombre de usuario para iniciar sesión y el usuario ha introducido un valor de alias válido como nombre de usuario. Este valor del alias puede ser una dirección de correo electrónico, un nombre de usuario preferido o un número de teléfono.<br />Si la solicitud y el grupo de usuarios cumplen los requisitos de alias, la respuesta de su función debe asignar el <code>username</code> parámetro que recibió a un atributo de alias. Además, la respuesta debe asignar su propio valor al <code>username</code> atributo. Si el grupo de usuarios no cumple las condiciones requeridas para asignar el grupo recibido <code>username</code> a un alias, entonces el parámetro <code>username</code> en la respuesta debe coincidir exactamente con la solicitud u omitirse. El <code>username</code> debe ser único en el grupo de usuarios. </td></tr>
</tbody>
</table>


**final UserStatus**  
Puede establecer este parámetro en `CONFIRMED` para confirmar automáticamente a los usuarios que pueden iniciar sesión con sus contraseñas anteriores. Al configurar un usuario en `CONFIRMED`, este no debe tomar medidas adicionales para poder iniciar sesión. Si no establece este atributo en `CONFIRMED`, se establece en `RESET_REQUIRED`.  
Un `finalUserStatus` de `RESET_REQUIRED` significa que el usuario debe cambiar su contraseña inmediatamente después de la migración al iniciar sesión y que la aplicación cliente debe gestionar la `PasswordResetRequiredException` durante el flujo de autenticación.  
Amazon Cognito no aplica la política de seguridad de contraseñas que configuró para el grupo de usuarios durante la migración mediante el desencadenador de Lambda. Si la contraseña no cumple con la política de contraseñas configurada, Amazon Cognito seguirá aceptando la contraseña para que pueda seguir migrando al usuario. Para aplicar la política de seguridad de la contraseña y rechazar contraseñas que no cumplan con la política, valide la seguridad de la contraseña del código. Luego, si la contraseña no cumple con la política, UserStatus defina final en`RESET_REQUIRED`.

**messageAction**  
Puede establecer este parámetro en `SUPPRESS` para rechazar el envío del mensaje de bienvenida que Amazon Cognito suele enviar a los usuarios nuevos. Si la función no devuelve este parámetro, Amazon Cognito envía el mensaje de bienvenida.

**deseado DeliveryMediums**  
Este parámetro puede establecerse en `EMAIL` para enviar el mensaje de bienvenida por correo electrónico o en `SMS` para enviar el mensaje de bienvenida por SMS. Si la función no devuelve este parámetro, Amazon Cognito envía el mensaje de bienvenida por SMS.

**fuerza AliasCreation**  
Si estableces este parámetro en, `TRUE` y el número de teléfono o la dirección de correo electrónico del UserAttributes parámetro ya existen como alias con un usuario diferente, la llamada a la API migra el alias del usuario anterior al usuario recién creado. El usuario anterior ya no podrá iniciar sesión con ese alias.  
Si define este parámetro en `FALSE` y el alias existe, Amazon Cognito no migrará al usuario y devolverá un error a la aplicación cliente.  
Si no devuelve este parámetro, Amazon Cognito asume que su valor es “false”.

**enableSMSMFA**  
Establezca este parámetro en `true` para solicitar que el usuario migrado complete la autenticación multifactor (MFA) de mensajes de texto SMS para iniciar sesión. El grupo de usuarios debe tener habilitada la MFA. Los atributos del usuario en los parámetros de la solicitud deben incluir un número de teléfono o, de lo contrario, la migración de ese usuario producirá un error.

## Ejemplo: Migrar un usuario con una contraseña existente
<a name="aws-lambda-triggers-user-migration-example-1"></a>

Con esta función de Lambda de ejemplo, se migra el usuario con una contraseña existente y se suprime el mensaje de bienvenida de Amazon Cognito.

------
#### [ Node.js ]

```
exports.handler = (event, context, callback) => {
  var user;

  if (event.triggerSource == "UserMigration_Authentication") {
    // authenticate the user with your existing user directory service
    user = authenticateUser(event.userName, event.request.password);
    if (user) {
      event.response.userAttributes = {
        email: user.emailAddress,
        email_verified: "true",
      };
      event.response.finalUserStatus = "CONFIRMED";
      event.response.messageAction = "SUPPRESS";
      context.succeed(event);
    } else {
      // Return error to Amazon Cognito
      callback("Bad password");
    }
  } else if (event.triggerSource == "UserMigration_ForgotPassword") {
    // Lookup the user in your existing user directory service
    user = lookupUser(event.userName);
    if (user) {
      event.response.userAttributes = {
        email: user.emailAddress,
        // required to enable password-reset code to be sent to user
        email_verified: "true",
      };
      event.response.messageAction = "SUPPRESS";
      context.succeed(event);
    } else {
      // Return error to Amazon Cognito
      callback("Bad password");
    }
  } else {
    // Return error to Amazon Cognito
    callback("Bad triggerSource " + event.triggerSource);
  }
};
```

------

## Solución de problemas del desencadenante de la migración del usuario
<a name="user-pool-lambda-migrate-user-troubleshooting"></a>

Si la migración no funciona según lo esperado aunque la función devuelva la respuesta documentada, compruebe las siguientes causas comunes.

**No se invoca el disparador**  
Amazon Cognito invoca el activador de migración de usuarios solo cuando el usuario no existe aún en el grupo de usuarios. Solo se aplica a los flujos de inicio de sesión `USER_PASSWORD_AUTH``ADMIN_USER_PASSWORD_AUTH`, y `USER_AUTH` (con contraseña) y al flujo de contraseña olvidada. [No se invoca para iniciar sesión con SRP (`USER_SRP_AUTH`), porque la contraseña del usuario nunca llega a tu función en ese flujo, ni para iniciar sesión sin contraseña.](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) Si el activador no se activa, confirma que el cliente de la aplicación permite uno de estos flujos y que el usuario aún no está presente en el grupo.

**Amazon Cognito no puede invocar la función**  
Si configura el activador con una política basada en recursos en la función y no a través de la consola de Amazon Cognito, la política debe permitir que el director `cognito-idp.amazonaws.com` del servicio `lambda:InvokeFunction` llame, según el ARN de su grupo de usuarios. La consola le añade este permiso; una función conectada con la infraestructura como código o la API de Lambda necesita que se añada de forma explícita. Sin él, la migración falla porque Amazon Cognito no puede invocar el desencadenador.

**El usuario inicia sesión pero no se crea ningún perfil**  
Amazon Cognito crea el usuario migrado solo cuando la función devuelve la respuesta con la forma exacta que esperaba: el `userAttributes` campo debe estar presente e incluir todos los atributos marcados como obligatorios en el grupo de usuarios. Una función que autentica al usuario pero devuelve un `response` objeto vacío o con un formato incorrecto, u omite un atributo obligatorio, completa la llamada de inicio de sesión sin conservar un perfil. Vuelva `userAttributes` con todos los atributos necesarios y establezca y según sea necesario. `finalUserStatus` `messageAction`