放大 CUSTOM_AUTH 和 username/password 因 NotAuthorizedException 而失败

Amplify CUSTOM_AUTH along with username/password is failing with NotAuthorizedException

我正在尝试使用 CUSTOM_AUTH(从 vuejs 应用程序放大 js 库)username/password 通过自定义电子邮件 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',
challengeResult: true,
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);
}

我的问题是,amplify 是否支持此功能?如果不行还有其他办法吗?

引用的文档 - https://docs.amplify.aws/lib/auth/switch-auth/q/platform/js#custom_auth-flow

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

我发现了问题。我的 create auth lambda 是错误的。我的 lambda 中的 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) 但它没有将日志写入云监视,这让我相信 lambda 没有被触发。我创建了一个新的 lambda 函数来修复日志记录问题。