Создает ли AdminUpdateUserAttributes нового пользователя в пуле пользователей Cognito?

#node.js #aws-sdk #amazon-cognito

#node.js #aws-sdk #amazon-cognito

Вопрос:

Краткие сведения

AdminUpdateUserAttributes создает нового пользователя в пуле пользователей Cognito, когда я пытаюсь изменить адрес электронной почты и email_verified.
Я хотел бы обновить атрибут «email» без проверки электронной почты.

Код

 const provider = new AWS.CognitoIdentityServiceProvider();
provider.adminUpdateUserAttributes({
        UserPoolId: userPoolId,
        Username: username, // this is previous email
        UserAttributes: [
          {
            Name: "email",
            Value: email, // this is new email
          },
          {
            Name: "email_verified",
            Value: "true"
          }
        ]
      }, ...)
 

Вопрос

Электронная почта задается как псевдоним имени пользователя.

Я хочу обновить электронную почту пользователя с помощью adminUpdateUserAttributes.
Иногда пользователь успешно обновляется.
Однако я понял, что некоторые пользователи дублируются при обновлении электронной почты.
Все они имеют одинаковые значения атрибутов, кроме email и username(UUID).

Почему возникла такая ситуация? и как это решить?

Обновить

Весь код, который я пробовал ниже.

 const provider = new AWS.CognitoIdentityServiceProvider();

  provider.adminGetUser({
    UserPoolId: userPoolId,
    Username: username // previous email
  }, (err, data) => {
    if (err) {
      console.log(err, err.stack)
    }else {
      const oldUsername = data.Username // get uuid username
      provider.adminUpdateUserAttributes({
        UserPoolId: userPoolId,
        Username: oldUsername,
        UserAttributes: [
          {
            Name: "email",
            Value: email, // new email
          },
          {
            Name: "email_verified",
            Value: "true"
          }
        ]
      }, (err, data) => {
          if (err) {
            console.log(err, err.stack);
          }else {
            provider.adminGetUser({
              UserPoolId: userPoolId,
              Username: email, // new email
            }, function(err, data) {
              if (err){
                console.log(err, err.stack)
              }else{
                console.log(data.Username, oldUsername)
                if (data.Username !== oldUsername){ // I would like to disable old user if they are duplicated.
                  provider.adminDisableUser({
                    UserPoolId: userPoolId,
                    Username: oldUsername
                  }, callback)
                }
              }
            })
          }
      })
    }
  })
 

Извините за вложенный уродливый код.

Идея

Этот код проверяет, отличаются ли имена пользователей UUID или нет.
Если UUID разные, я подумал, что это означает, что пользователь был дублирован.
Я пытаюсь отключить пользователя, когда это произойдет.

Реальный

Несмотря на то, что идентификаторы UUID совпадают, создается новый пользователь.

Кажется, что функция AdminUpdateUserAttributes не всегда предназначена для создания нового пользователя. Поэтому я не могу отключать пользователя каждый раз.

Ответ №1:

Это ожидаемое поведение. Когда вы обновляете электронное письмо, которое в вашем случае действует как уникальный идентификатор пользователя, оно создаст нового пользователя. Старый пользователь будет отключен. Вы можете добавить дополнительный код для удаления этого старого пользователя, если хотите.

Комментарии:

1. Спасибо за ответ. Так почему же иногда он обновляет пользователя правильно? В некоторых случаях требуется обновить электронную почту без изменения имени пользователя (uuid). И старый пользователь не был отключен. Он все еще был включен после создания дублированного пользователя.