我们已经实现了这里描述的自定义验证触发器。我们设置了用户池,允许用户使用电话号码或电子邮件登录。
提供的情况是-用户有电子邮件&手机都在他们的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。