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
1 Antwort
0

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

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

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

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen