'Can one set email_verified to true in Cognito programmatically? How?

When I update the cognito users' email attribute via the updateAttribute or adminUpdateAttribute API, email_verified will be set to false. So I'd like to set email_verified to true programitically.

My understanding is that it should use GetUserAttributeVerificationCode and VerifyUserAttribute API to set email_verified to true, but I don't want users to enter verification code. https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html

As far as I see below, it seems impossible.
https://forums.aws.amazon.com/thread.jspa?messageID=782609



Solution 1:[1]

Yes, it's possible using UpdateUserAttributes. Per the docs:

In your call to AdminCreateUser, you can set the email_verified attribute to True, and you can set the phone_number_verified attribute to True. (You can also do this by calling AdminUpdateUserAttributes.)

  • email: The email address of the user to whom the message that contains the code and username will be sent. Required if the email_verified attribute is set to True, or if "EMAIL" is specified in the DesiredDeliveryMediums parameter.

Solution 2:[2]

Using UpdateUserAttributes API, it is possible.

Solution 3:[3]

Use the AWS CLI to update a Cognito User's "email_verified" attribute to true:

aws cognito-idp admin-update-user-attributes --user-pool-id ENTER_POOL_ID --username ENTER_USERNAME --user-attributes '[{"Name": "email_verified", "Value": "true"}]'

Resource: AWS Forum

Solution 4:[4]

In addition to the answer of @ffxsam, here is the working code:

CognitoIdentityProviderClient client = CognitoIdentityProviderClient.builder().build();

client.adminUpdateUserAttributes(AdminUpdateUserAttributesRequest.builder()
    .userPoolId(getUserPoolId())
    .username(username)
    .userAttributes(AttributeType.builder()
        .name("email")
        .value(updatedInfo.getEmail())
        .build(),
        AttributeType.builder()
        .name("email_verified")
        .value("True")
        .build())
    .build());

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 ffxsam
Solution 2 R.yama
Solution 3 Mike Dubs
Solution 4 Hannes Schneidermayer