#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). И старый пользователь не был отключен. Он все еще был включен после создания дублированного пользователя.