PostAuthentication - 自动验证电话号码(不在PreSignUp中)

0

【以下的问题经过翻译处理】 我正在实现无需密码的短信认证。流程为:登录 -> 错误(用户未找到)-> 注册 -> 登录 -> OTP 发送到手机 -> 用户输入 OTP -> 确认登录 -> 成功登录。这个流程可以工作,用户可以成功登录。但是 phone_number 的验证最好发生在 PostAuthentication 中(在用户输入并成功检查 OTP 后登录后),而不是在 PreSignUp 中。

我有以下 lambda:PreSignUp、DefineAuthChallenge、CreateAuthChallenge、VerifyAuthChallengeResponse、PostAuthentication。一切都很顺利。想要做一件好事:在 Post Authentication 中自动验证电话号码,而不是在 PreSignUp lambda 中。怎么做?我想在 PostAuthentication lambda 中使用以下内容可以实现它:

    event.response.phone_number_verified = "true"

但没有成功。我还尝试设置:

event.request.userAttributes.phone_number_verified = "true"

也没有成功。在 PreSignUp 中,以下内容运行得很好:

event.response.autoVerifyPhone = true;

PostAuthentication lambda (custom.js):

exports.handler = async (event, context) => {
  console.log('Received EVENT', JSON.stringify(event, null, 2));                      if (event.request.userAttributes.hasOwnProperty("email")                                 && event.request.userAttributes.email_verified != "true") {                   
      event.request.userAttributes.email_verified = "true"                            
      event.response.email_verified = "true";
  }   
  if (event.request.userAttributes.hasOwnProperty("phone_number")              && event.request.userAttributes.phone_number_verified != "true") {   
      event.request.userAttributes.phone_number_verified = "true";  
      event.response.phone_number_verified = "true";   
  } 
  console.log('Returning event', JSON.stringify(event, null, 2))                      
  return event;                                                                       
};


PreSignUp (custom.js):

"use strict";
exports.handler = async (event) => {
    console.log('Received EVENT', JSON.stringify(event, null, 2));
    event.response.autoConfirmUser = true;
    /*
    if (event.request
profile picture
专家
已提问 6 个月前66 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好,

你不能将“已验证为真(verified true)”作为返回结构的一部分返回,而是需要通过AdminUpdateUserAttributes的专用API调用[<https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html>] 在其中一个Lambda函数中更新属性。

这就是状态未更新的原因。

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则