首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在通过电话确认前,认知改变phone_number

在通过电话确认前,认知改变phone_number
EN

Stack Overflow用户
提问于 2017-09-13 09:02:38
回答 3查看 4.5K关注 0票数 6

在用户通过电话确认之前,我想更改用户的phone_number属性。我的流动步骤:

  1. 用户按用户名、密码和电话号码注册
  2. 用户必须输入电话收到的确认代码。在这个步骤中,用户想要更改电话号码(错误的号码或更改电话.)

如果第一个电话号码是错误的,下一个电话号码是正确的,-> --只发送了一个确认码-> --它工作!

2.2如果第一个电话号码和下一个电话号码是正确的,->有两个确认码已经发送(1- xxx,2- yyy) ->用户输入第二确认码,科尼托抛出CodeMismatchException: Invalid verification code provided, please try again.错误。用户输入第一码,用户已被确认,但在认知系统中,用户的phone_number为第二位,phone_number_verifiedtrue

我使用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函数来处理代码)。

EN

回答 3

Stack Overflow用户

发布于 2017-12-21 22:45:37

我是科尼托团队的一员,和behrooziAWS一样。在看过您的场景之后,它确实是我们这边的一个bug。我将在小组内提及这一点,以便我们相应地确定优先次序。

票数 1
EN

Stack Overflow用户

发布于 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天

票数 1
EN

Stack Overflow用户

发布于 2019-02-26 13:17:47

对于其他寻求答案的人来说,我最终所做的就是写一个lambda,它本质上检查一个用户是否未被确认,删除用户,然后再注册他们。我最初使用的是updateUserAttributes路径,但如果一个糟糕的演员能够访问lambda,并将确认的用户的电话号码更新到他们的,它就会感到不安全。如果用户以不同的用户名注册,但从不同的帐户注册相同的号码,则将使其他用户帐户无效。因此,下面的逻辑。

代码语言:javascript
复制
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)
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46193223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档