放大 CUSTOM_AUTH 以及用户名/密码失败并出现 NotAuthorizedException

问题描述

我正在尝试使用 CUSTOM_AUTH(从 vuejs 应用程序放大 js 库)使用自定义电子邮件 OTP 进行用户名/密码登录

我已将 authenticationFlowType 设置为 CUSTOM_AUTH

以下是步骤-

  1. Auth.signIn(用户名,密码)
  2. 这将执行define auth challange lambda的前2个案例 触发
  3. 定义 auth challange lambda 的输入 json 如下所示

{
challengeName: 'SRP_A',challengeResult: true,challengeMetadata: null
},{
challengeName: 'PASSWORD_VERIFIER',challengeMetadata: null
}

  1. 很明显,密码已经过验证。
  2. 现在将挑战设置为 CUSTOM_CHALLANGE。
  3. 此时客户端失败并返回 NotAuthorizedException(用户名或密码不正确) 要求挑战答案。

My define auth challange lambda is like this -

exports.handler = async (event,context) => {
console.log(event.request.session)
if (event.request.session.length == 1 && event.request.session[0].challengeName == 'SRP_A') {
event.response.issuetokens = false;
event.response.failAuthentication = false;
event.response.challengeName = 'PASSWORD_VERIFIER';
}
else if (event.request.session.length == 2 && event.request.session[1].challengeName == 'PASSWORD_VERIFIER' && event.request.session[1].challengeResult == true) {
event.response.issuetokens = false;
event.response.failAuthentication = false;
event.response.challengeName = 'CUSTOM_CHALLENGE';
}
else if (event.request.session.length == 3 && event.request.session[2].challengeName == 'CUSTOM_CHALLENGE' && event.request.session[2].challengeResult == true) {
event.response.issuetokens = true;
event.response.failAuthentication = false;
}
else {
console.log('Failing Authentication')
event.response.issuetokens = false;
event.response.failAuthentication = true;
}
context.done(null,event);
}

我的问题是,这是否得到了放大的支持?不行的话还有什么办法吗?

参考文档 - https://docs.amplify.aws/lib/auth/switch-auth/q/platform/js#custom_auth-flow

这建议您不要提供密码,但这也不起作用。

解决方法

我发现了这个问题。我的 create auth lambda 是错误的。我的 lambda 中的 if 语句是 if (!event.request.session || event.request.session.length === 0) {

但应该是

if (event.request.session.length === 2 && event.request.challengeName === 'CUSTOM_CHALLENGE') {

我在 if 语句之前的 create auth lambda 中有一个 console.log(event) ,但这并没有将日志写入 cloud watch 这让我相信 lambda 没有被解雇。我创建了一个新的 lambda 函数来修复日志记录问题。