使用Cognito的无密码身份验证-如何确定用户是否使用电子邮件或电话号码注册



我们已经实现了这里描述的自定义验证触发器。我们设置了用户池,允许用户使用电话号码或电子邮件登录。

提供的情况是-用户有电子邮件&手机都在他们的Cognito账户验证

我遇到的问题是确定用户登录的媒介(电子邮件或电话号码)当观察传递到定义/创建/验证验证触发器的事件时,似乎没有通过什么用户名被用来初始化身份验证流。只有用户属性,在我的情况下,可以是电子邮件或电话。我需要知道它是哪一个,所以我知道我是否需要通过短信或电子邮件发送代码。

我也读到ClientMetadata这个键,我们可以从initiateauthcommandput中传递,但它只会在这些触发器下面提供客户端元数据键

Pre signup
Pre-authentication
User migration

但是它不会在这些触发器中提供ClientMetadata

Post authentication
Custom message
Pre token generation
Create auth challenge
Define auth challenge
Verify auth challenge

在谷歌上搜索了太多之后,我发现了一篇文章,其中有一个棘手的解决方案:这是链接我无法实现提供的解决方案。

我在堆栈溢出中发现了一个类似的问题链接,但也没有答案,有人能帮我解决这个问题吗?

这是通过在无密码登录期间添加自定义属性来解决的方法

实际上,authenticationUser函数需要识别用户在登录时是否添加了电子邮件或电话

步骤1:在登录过程中,在调用initiateAuthCommand之前,首先在Cognito用户对象-logged_in_by-email or phone中设置自定义属性

步骤2:一旦你添加了一个键之后,InitiateAuthCommand将启动并调用触发器

步骤3:当createAuthChallenge运行时,我们将有userAttributes.logged_in_by

如果此属性包含email,则表明用户正在尝试使用电子邮件登录,并且我们需要通过电子邮件发送OTP。

如果此属性包含phone,这表明用户正在尝试使用电话登录,我们需要通过电话号码发送OTP。

相关内容

  • 没有找到相关文章

最新更新