ios - 放大自定义挑战从未发送
问题描述
我正在尝试实施 AWS 入门文档中的自定义无密码注册流程。我快到了,在最后一步它失败了。登录后,我无法让 Cognito 向用户发送包含自定义挑战的电子邮件。身份验证系统的所有其他方面都可以正常工作。
这是我的登录代码:
func signIn(username: String) {
Amplify.Auth.signIn(username: username, password: "bla") { [weak self] result in
switch result {
case .success (let result):
if case .confirmSignInWithCustomChallenge(_) = result.nextStep {
DispatchQueue.main.async {
self?.showConfirmationSignInView()
}
} else {
print("Sign in succeeded")
}
case .failure(let error):
print("Sign in failed \(error)")
}
}
}
func customChallenge(response: String) {
Amplify.Auth.confirmSignIn(challengeResponse: response) {[weak self] result in
switch result {
case .success:
DispatchQueue.main.async {
self?.getCurrentAuthUser()
}
print("Confirm sign in succeeded")
case .failure(let error):
print("Confirm sign in failed \(error)")
}
}
}
}
我的 lambda 触发器设置如下:
CREATAEAUTHCHALLENGE
function createAuthChallenge(event) {
if (event.request.challengeName === 'CUSTOM_CHALLENGE') {
event.response.publicChallengeParameters = {};
event.response.privateChallengeParameters = {};
event.response.privateChallengeParameters.answer = process.env.CHALLENGEANSWER;
}
}
exports.handler = (event, context, callback) => {
createAuthChallenge(event);
callback(null, event);
};
定义挑战
exports.handler = function(event, context) {
if (event.request.session.length == 1 && event.request.session[0].challengeName == 'SRP_A') {
event.response.issueTokens = false;
event.response.failAuthentication = false;
event.response.challengeName = 'CUSTOM_CHALLENGE';
} else if (event.request.session.length == 2 && event.request.session[1].challengeName == 'CUSTOM_CHALLENGE' && event.request.session[1].challengeResult == true) {
event.response.issueTokens = true;
event.response.failAuthentication = false;
event.response.challengeName = 'CUSTOM_CHALLENGE';
} else {
event.response.issueTokens = false;
event.response.failAuthentication = true;
}
context.done(null, event);
}
验证挑战
function verifyAuthChallengeResponse(event) {
if (event.request.privateChallengeParameters.answer === event.request.challengeAnswer) {
event.response.answerCorrect = true;
} else {
event.response.answerCorrect = false;
}
}
exports.handler = (event, context, callback) => {
verifyAuthChallengeResponse(event);
callback(null, event);
};
尽管如果我简单地对质询响应进行硬编码,用户就能够成功确认登录,但永远不会收到一封电子邮件,告诉用户自定义质询是什么。任何帮助,将不胜感激!
解决方案
推荐阅读
- flutter - 为什么我不能在 Flutter WEB 上滑动 ListView.builder?
- python - 描述性统计,python
- informatica-data-integration-hub - Informatica 之间的提取值
- android - Firebase 数据库设置值不会更改值
- java - 无法使用 Javal 11、Jetty 和 Jersey 将 HttpServletRequest 注入到 ContainerRequestFilter
- javascript - 如何使用谷歌表格中的应用脚本获取谷歌课堂作业数据
- php - Studio->getopt('send-errors') | WordPress
- amazon-web-services - 位置“默认”的备份存储无效
- javascript - 将表单数据解析为对象,然后推入数组
- apache-spark - 试图转换时间戳但得到模式 datetimeformatter 错误