首页 > 解决方案 > 放大自定义挑战从未发送

问题描述

我正在尝试实施 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);
};

尽管如果我简单地对质询响应进行硬编码,用户就能够成功确认登录,但永远不会收到一封电子邮件,告诉用户自定义质询是什么。任何帮助,将不胜感激!

标签: iosaws-amplify

解决方案


推荐阅读