何时执行身份验证质询触发器?

时间:2016-09-04 22:24:08

标签: amazon-web-services authentication lambda triggers amazon-cognito

作为我的用户池的Auth Challenge,我定义了一个Lambda函数。此功能向Authy发送请求以请求One Touch身份验证。

我希望将此设置添加到Cognito登录过程中。

但是,当我进行身份验证时,使用用户名和密码登录Cognito用户时,不会触发此lambda函数!

我错了什么? Lambda触发器仅用于为注册过程定义吗?谢谢

---------------------更新:------------------------ ------------------------

我的登录代码,需要用户名和密码:

authenticate(userName, userPassword) {
    var userData = {Username: userName, Pool : CognitoUserPool}
    var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);

    var authenticationData = {Username : userName, Password : userPassword};
    var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);

    cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: function (session) {
            AWSInitialize(cognitoUser, session);
            face.showHome();
        }.bind(this),

        mfaRequired: function(session){
            new MFAConfirmation(cognitoUser, 'login');
        },

        onFailure: function(err) {
            alert(err);
        }
    });
};

定义触发器的位置:

enter image description here

1 个答案:

答案 0 :(得分:4)

Define Auth Challenge lambda只能在CUSTOM_AUTH流的上下文中工作,因此在进行身份验证时必须将CUSTOM_AUTH作为AuthFlow传递。在Javascript中你可以这样做:

entryComponents

Cognito使用AWS Lambda Triggers开发人员指南中的示例实际上是这样做的。他们允许您在使用用户名和密码进行身份验证后定义另一个挑战。

Define Auth Challenge示例允许您在使用用户名和密码进行身份验证后设置另一个挑战。当您将CUSTOM_CHALLENGE指定为挑战时,它会调用Create Auth Challenge lambda触发器。

    cognitoUser.setAuthenticationFlowType('CUSTOM_AUTH');