在用户通过电话确认之前,我想更改用户的phone_number属性。我的流动步骤:
如果第一个电话号码是错误的,下一个电话号码是正确的,-> --只发送了一个确认码-> --它工作!
2.2如果第一个电话号码和下一个电话号码是正确的,->有两个确认码已经发送(1- xxx,2- yyy) ->用户输入第二确认码,科尼托抛出CodeMismatchException: Invalid verification code provided, please try again.错误。用户输入第一码,用户已被确认,但在认知系统中,用户的phone_number为第二位,phone_number_verified为true。
我使用adminUpdateUserAttributes来更改状态为UNCONFIRMED的用户的phone_number。确认码自动发送后,我打电话换电话号码。
怎么解决这个问题?
!更新
目前,我从我的应用程序中删除了特性User can update their phone_number before they confirmed via phone。
我花了大约5天时间,我只想把我的案子记下来。
当您尝试更新phone_number (或email)属性时,科尼托将自动向您的电话(或电子邮件)发送确认信息,这是第一个代码-(第1- xxx),该代码用于确认您的新属性值(而不是用于用户确认)。
同时,逻辑代码调用resendConfirmationCode函数,它发送第二个代码-(2- yyy),这是只运行第二个代码的主要原因(我们使用confirmSignUp函数来处理代码)。
发布于 2017-12-21 22:45:37
我是科尼托团队的一员,和behrooziAWS一样。在看过您的场景之后,它确实是我们这边的一个bug。我将在小组内提及这一点,以便我们相应地确定优先次序。
发布于 2018-03-18 09:14:23
这个问题是在一段时间前提出的,但是有些人在发送验证代码时仍然有问题,并且无法验证帐户上的代码,所以我找到了一个对我们有用的解决方案。
我们的流量是:
SignUp -> OTP Screen -> Confirmed OTP -> Cognito Account confirmed -> Custom email sent to user to verify email address -> Update attribute email_verified = true
在OTP屏幕上,我们显示OTP已发送到的号码,如果是不正确的号码,我们允许用户返回到注册页面并更改编号并重新提交注册。我们使用UUID对用户进行认知,以便允许用户再次注册,而不会在帐户已经存在但尚未确认的情况下导致错误。
这意味着我们得到了两个帐户的UUID在认知,一个被确认和一个与帐户唯一的区别是电话号码。然后,经过一段时间后,我们就会处理掉未经证实的账户。例如7天
发布于 2019-02-26 13:17:47
对于其他寻求答案的人来说,我最终所做的就是写一个lambda,它本质上检查一个用户是否未被确认,删除用户,然后再注册他们。我最初使用的是updateUserAttributes路径,但如果一个糟糕的演员能够访问lambda,并将确认的用户的电话号码更新到他们的,它就会感到不安全。如果用户以不同的用户名注册,但从不同的帐户注册相同的号码,则将使其他用户帐户无效。因此,下面的逻辑。
try {
const userParams = {
UserPoolId: process.env.userpool_id,
Username: event.args.username
};
const { UserStatus } = await identity.adminGetUser(userParams).promise();
if (UserStatus === 'UNCONFIRMED') {
const deletedIdentity = await identity.adminDeleteUser(userParams).promise();
if (deletedIdentity) {
const signupParams = {
ClientId: process.env.client_id,
Password: event.args.password,
Username: event.args.password,
UserAttributes: [
{
Name: 'phone_number',
Value: event.args.phoneNumber
}
]
}
const newSignUp = await identity.signUp(signupParams).promise();
if (newSignUp) {
response.send(event, context, response.SUCCESS, {
newSignUp
});
callback(null, newSignUp)
}
}
} else {
response.send(event, context, response.ACCESSDENIED, {
error: 'User not authorized to perform this action'
});
callback({error: 'User not authorized to perform this action'}, null)
}
} catch (error) {
response.send(event, context, response.FAILURE, {
error
});
callback(error, null)
}https://stackoverflow.com/questions/46193223
复制相似问题