作为我的用户池的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);
}
});
};
定义触发器的位置:
答案 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');