

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Trigger Lambda di pre-registrazione
<a name="user-pool-lambda-pre-sign-up"></a>

Potresti voler personalizzare la procedura di registrazione nei pool di utenti che dispongono di opzioni di iscrizione self-service. Alcuni usi comuni del trigger di pre-iscrizione consistono nell'eseguire analisi e registrazioni personalizzate di nuovi utenti, applicare standard di sicurezza e governance o collegare gli utenti di un IdP di terze parti a [un profilo utente consolidato](cognito-user-pools-identity-federation-consolidate-users.md). Potresti anche avere utenti fidati che non sono tenuti a sottoporsi a [verifiche](signing-up-users-in-your-app.md) e conferme.

Immediatamente prima che Amazon Cognito completi la creazione di un nuovo utente [locale](cognito-terms.md#terms-localuser) o [federato](cognito-terms.md#terms-federateduser), attiva la funzione Lambda di pre-registrazione. L'`userAttributes`oggetto di richiesta inviato a questa funzione contiene attributi che sono stati forniti durante la registrazione dell'utente locale o che sono stati mappati correttamente dagli attributi del provider per un utente federato. Il tuo pool di utenti richiama questo trigger all'iscrizione in modalità self-service [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)o al primo accesso con un provider di [identità](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-federated) affidabile e alla creazione di utenti con. [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) Come parte del processo di registrazione, puoi utilizzare questa funzione per analizzare l'evento di accesso con una logica personalizzata e modificare o rifiutare il nuovo utente.

**Topics**
+ [Parametri del trigger Lambda di pre-registrazione](#cognito-user-pools-lambda-trigger-syntax-pre-signup)
+ [Esempio di pre-registrazione: conferma automatica degli utenti di un dominio registrato](#aws-lambda-triggers-pre-registration-example)
+ [Esempio di pre-registrazione: conferma e verifica automatica di tutti gli utenti](#aws-lambda-triggers-pre-registration-example-2)
+ [Esempio di pre-registrazione: registrazione rifiutata se il nome utente ha meno di cinque caratteri](#aws-lambda-triggers-pre-registration-example-3)

## Parametri del trigger Lambda di pre-registrazione
<a name="cognito-user-pools-lambda-trigger-syntax-pre-signup"></a>

La richiesta passata da Amazon Cognito a questa funzione Lambda è una combinazione dei parametri seguenti e dei [parametri comuni](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) aggiunti da Amazon Cognito a tutte le richieste.

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

```
{
    "request": {
        "userAttributes": {
            "string": "string",
            . . .
        },
        "validationData": {
            "string": "string",
            . . .
         },
        "clientMetadata": {
            "string": "string",
            . . .
         }
    },

    "response": {
        "autoConfirmUser": "boolean",
        "autoVerifyPhone": "boolean",
        "autoVerifyEmail": "boolean"
    }
}
```

------

### Parametri di richiesta di pre registrazione
<a name="cognito-user-pools-lambda-trigger-syntax-pre-signup-request"></a>

**userAttributes**  
Una o più coppie nome-valore che rappresentano gli attributi utente. I nomi di attributo sono le chiavi.

**validationData**  
Una o più coppie chiave-valore con i dati degli attributi utente che la tua app ha passato ad Amazon Cognito nella richiesta di creazione di un nuovo utente. Invia queste informazioni alla tua funzione Lambda nel ValidationData parametro della tua richiesta [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html)o [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)API.  
Amazon Cognito non imposta ValidationData i tuoi dati come attributi dell'utente che crei. ValidationData sono informazioni temporanee sull'utente fornite ai fini del trigger Lambda prima della registrazione.

**clientMetadata**  
Una o più coppie chiave-valore che è possibile fornire come input personalizzato alla funzione Lambda specificata per il trigger di pre-registrazione. Puoi passare questi dati alla tua funzione Lambda utilizzando il ClientMetadata parametro nelle seguenti azioni API: [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html), [AdminRespondToAuthChallenge[ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html), e. [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)

### Parametri di risposta di pre-registrazione
<a name="cognito-user-pools-lambda-trigger-syntax-pre-signup-response"></a>

Nella risposta, puoi impostare `autoConfirmUser` su `true` se desideri auto confermare l'utente. Puoi impostare `autoVerifyEmail` su `true` per auto verificare l'e-mail dell'utente. Puoi impostare `autoVerifyPhone` su `true` per auto verificare il numero di telefono dell'utente.

**Nota**  
I parametri di risposta `autoVerifyPhone`, `autoVerifyEmail` e `autoConfirmUser` vengono ignorati da Amazon Cognito quando la funzione Lambda di pre-registrazione viene attivata dall'API `AdminCreateUser`.

**autoConfirmUser**  
Impostare su `true` per auto confermare l'utente o altrimenti su `false`.

**autoVerifyEmail**  
Imposta su `true` per definire come verificato il messaggio e-mail di un utente che sta effettuando la registrazione o altrimenti su `false`. Se `autoVerifyEmail` è impostato su `true`, l'attributo della `email` deve avere un valore valido e non nullo. In caso contrario, si verificherà un errore e l'utente non sarà in grado di completare la registrazione.  
Se l'attributo `email` è selezionato come alias, viene creato un alias per l'indirizzo e-mail dell'utente quando è impostato `autoVerifyEmail`. Se esiste già un alias con quell'indirizzo e-mail, l'alias verrà spostato al nuovo utente e l'indirizzo e-mail dell'utente precedente verrà contrassegnato come non verificato. Per ulteriori informazioni, consulta [Personalizzazione degli attributi di accesso](user-pool-settings-attributes.md#user-pool-settings-aliases).

**autoVerifyPhone**  
Imposta su `true` per impostare come verificato il numero di telefono di un utente che sta effettuando la registrazione o altrimenti su `false`. Se `autoVerifyPhone` è impostato su `true`, l'attributo della `phone_number` deve avere un valore valido e non nullo. In caso contrario, si verificherà un errore e l'utente non sarà in grado di completare la registrazione.  
Se l'attributo del `phone_number` è selezionato come un alias, un alias verrà creato per il numero di telefono dell'utente quando `autoVerifyPhone` è impostato. Se esiste già un alias con quel numero di telefono, l'alias verrà spostato al nuovo utente e il numero di telefono dell'utente precedente verrà contrassegnato come non verificato. Per ulteriori informazioni, consulta [Personalizzazione degli attributi di accesso](user-pool-settings-attributes.md#user-pool-settings-aliases).

## Esempio di pre-registrazione: conferma automatica degli utenti di un dominio registrato
<a name="aws-lambda-triggers-pre-registration-example"></a>

Questo è un esempio di codice trigger Lambda. Il trigger di pre-registrazione viene richiamato immediatamente prima che Amazon Cognito elabori la richiesta di registrazione. Utilizza un attributo personalizzato **custom:domain** per confermare automaticamente i nuovi utenti di un determinato dominio e-mail. Tutti i nuovi utenti che non fanno parte del dominio personalizzato verranno aggiunti al bacino d'utenza, ma non saranno confermati automaticamente.

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

```
export const handler = async (event, context, callback) => {
  // Set the user pool autoConfirmUser flag after validating the email domain
  event.response.autoConfirmUser = false;

  // Split the email address so we can compare domains
  var address = event.request.userAttributes.email.split("@");

  // This example uses a custom attribute "custom:domain"
  if (event.request.userAttributes.hasOwnProperty("custom:domain")) {
    if (event.request.userAttributes["custom:domain"] === address[1]) {
      event.response.autoConfirmUser = true;
    }
  }

  // Return to Amazon Cognito
  callback(null, event);
};
```

------
#### [ Python ]

```
def lambda_handler(event, context):
    # It sets the user pool autoConfirmUser flag after validating the email domain
    event['response']['autoConfirmUser'] = False

    # Split the email address so we can compare domains
    address = event['request']['userAttributes']['email'].split('@')

    # This example uses a custom attribute 'custom:domain'
    if 'custom:domain' in event['request']['userAttributes']:
        if event['request']['userAttributes']['custom:domain'] == address[1]:
            event['response']['autoConfirmUser'] = True

    # Return to Amazon Cognito
    return event
```

------

Amazon Cognito trasferisce informazioni sugli eventi alla funzione Lambda. La funzione quindi restituisce a Amazon Cognito lo stesso oggetto evento con eventuali modifiche nella risposta. Nella console Lambda puoi configurare un evento di test con i dati pertinenti al trigger Lambda. Di seguito è riportato un evento di test per questo esempio di codice:

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

```
{
    "request": {
        "userAttributes": {
            "email": "testuser@example.com",
            "custom:domain": "example.com"
        }
    },
    "response": {}
}
```

------

## Esempio di pre-registrazione: conferma e verifica automatica di tutti gli utenti
<a name="aws-lambda-triggers-pre-registration-example-2"></a>

Questo esempio conferma tutti gli utenti e imposta lo stato di avvenuta verifica per gli attributi `email` e `phone_number` dell'utente se presenti. Inoltre, se l'aliasing è abilitato, saranno creati gli alias per `phone_number` e `email` nei casi in cui è impostata la verifica automatica. 

**Nota**  
Se esiste già un alias con lo stesso numero di telefono, l'alias verrà spostato al nuovo utente e il `phone_number` dell'utente precedente verrà contrassegnato come non verificato. Lo stesso vale per gli indirizzi e-mail. Per evitare che ciò accada, puoi utilizzare l'[ListUsers API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) dei pool di utenti per vedere se esiste un utente esistente che sta già utilizzando il numero di telefono o l'indirizzo e-mail del nuovo utente come alias.

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

```
exports.handler = (event, context, callback) => {
  // Confirm the user
  event.response.autoConfirmUser = true;

  // Set the email as verified if it is in the request
  if (event.request.userAttributes.hasOwnProperty("email")) {
    event.response.autoVerifyEmail = true;
  }

  // Set the phone number as verified if it is in the request
  if (event.request.userAttributes.hasOwnProperty("phone_number")) {
    event.response.autoVerifyPhone = true;
  }

  // Return to Amazon Cognito
  callback(null, event);
};
```

------
#### [ Python ]

```
def lambda_handler(event, context):
    # Confirm the user
    event['response']['autoConfirmUser'] = True

    # Set the email as verified if it is in the request
    if 'email' in event['request']['userAttributes']:
        event['response']['autoVerifyEmail'] = True

    # Set the phone number as verified if it is in the request
    if 'phone_number' in event['request']['userAttributes']:
        event['response']['autoVerifyPhone'] = True

    # Return to Amazon Cognito
    return event
```

------

Amazon Cognito trasferisce informazioni sugli eventi alla funzione Lambda. La funzione quindi restituisce a Amazon Cognito lo stesso oggetto evento con eventuali modifiche nella risposta. Nella console Lambda puoi configurare un evento di test con i dati pertinenti al trigger Lambda. Di seguito è riportato un evento di test per questo esempio di codice:

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

```
{
  "request": {
    "userAttributes": {
      "email": "user@example.com",
      "phone_number": "+12065550100"
    }
  },
  "response": {}
}
```

------

## Esempio di pre-registrazione: registrazione rifiutata se il nome utente ha meno di cinque caratteri
<a name="aws-lambda-triggers-pre-registration-example-3"></a>

Questo esempio verifica la lunghezza del nome utente in una richiesta di registrazione. L'esempio restituisce un errore se l'utente immette un nome con meno di cinque caratteri.

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

```
export const handler = (event, context, callback) => {
    // Impose a condition that the minimum length of the username is 5 is imposed on all user pools.
    if (event.userName.length < 5) {
        var error = new Error("Cannot register users with username less than the minimum length of 5");
        // Return error to Amazon Cognito
        callback(error, event);
    }
    // Return to Amazon Cognito
    callback(null, event);
};
```

------
#### [ Python ]

```
def lambda_handler(event, context):
    if len(event['userName']) < 5:
        raise Exception("Cannot register users with username less than the minimum length of 5")
    # Return to Amazon Cognito
    return event
```

------

Amazon Cognito trasferisce informazioni sugli eventi alla funzione Lambda. La funzione quindi restituisce a Amazon Cognito lo stesso oggetto evento con eventuali modifiche nella risposta. Nella console Lambda puoi configurare un evento di test con i dati pertinenti al trigger Lambda. Di seguito è riportato un evento di test per questo esempio di codice:

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

```
{
  "userName": "rroe",
  "response": {}
}
```

------