Создает ли AdminUpdateUserAttributes нового пользователя в Cognito UserPool? - PullRequest
0 голосов
/ 19 апреля 2019

Сводка

AdminUpdateUserAttributes создает нового пользователя в Cognito UserPool, когда я пытаюсь изменить адрес электронной почты и 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.
Иногда пользователь успешно обновляется.
Однако я обнаружил, что некоторые пользователи дублируются при обновлении электронной почты.
Они имеют все те же значения атрибутов, кроме электронной почты иИмя пользователя (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 разные, я подумал, что это означает, что пользователь был дублирован.
Я пытаюсь отключить пользователя, когда это происходит.

Real

Даже если идентификаторы UUID одинаковы, создается новый пользователь.

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

1 Ответ

0 голосов
/ 19 апреля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...