问题描述
我正在尝试使用 CUSTOM_AUTH(从 vuejs 应用程序放大 js 库)使用自定义电子邮件 OTP 进行用户名/密码登录
我已将 authenticationFlowType 设置为 CUSTOM_AUTH
以下是步骤-
- Auth.signIn(用户名,密码)
- 这将执行define auth challange lambda的前2个案例 触发
- 定义 auth challange lambda 的输入 json 如下所示
- 很明显,密码已经过验证。
- 现在将挑战设置为 CUSTOM_CHALLANGE。
- 此时客户端失败并返回 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 函数来修复日志记录问题。