我有一个移动应用程序,并想使用AWS认知池进行用户管理(注册和注册)。我想提供以下3个选项供用户登录到我的应用程序
在注册过程中,用户将设置用户名、密码和添加已验证的电话号码,并且可以选择将他们的google连接添加到他们的配置文件中。
如何为该场景设置认知池,用户可以选择上述3种选项中的任何一种来登录应用程序?
发布于 2018-09-24 15:00:59
我找到了一种方式来设置认知允许多个登录选项。设置 1.选择“使用电话号码作为用户名2”,使其成为强制性和可验证的。3.这将使phone_number成为登录的别名。
使用CUSTOM_CHALLENGE选项配置带有OTP电话号码的登录。
基本上,我们需要配置三个触发器在认知发送OTP到用户注册号码。1.登录--定义auth挑战触发器--定义CUSTOM_CHALLENGE 2.登录创建auth挑战触发器--创建生成OTP的逻辑并使用SNS服务发送短信。3.登录--在验证auth挑战触发器--验证接收到的OTP时,生成的OTP将在上下文中可用,因此不需要保存在任何数据库中。
Trigger#1 -定义auth挑战性
exports.handler = (event, context, callback) => {
if (event.request.session.length == 0){
event.response.issueTokens = false;
event.response.failAuthentication = false;
event.response.challengeName = 'CUSTOM_CHALLENGE';
} else if(event.request.session.length == 1
&& event.request.session[0].challengeName == 'CUSTOM_CHALLENGE'
&& event.request.session[0].challengeResult == true){
event.response.issueTokens = true;
event.response.failAuthentication = false;
} else {
event.response.issueTokens = false;
event.response.failAuthentication = true;
}
// Return to Amazon Cognito
callback(null, event);
}Trigger#2 -创建auth挑战性确保此lambda具有SNS角色
var AWS = require("aws-sdk");
exports.handler = (event, context, callback) => {
if (event.request.session.length == 0 && event.request.challengeName == 'CUSTOM_CHALLENGE') {
//create the code
var answer = Math.random().toString(10).substr(2,6);
//send the code via Amazon SNS Global SMS
var sns = new AWS.SNS();
sns.publish({
Message: 'your verification code is '+answer,
PhoneNumber: event.request.userAttributes.phone_number
}, function(err, data) {
if (err){
console.log(err, err.stack); // an error occurred
return;
}
console.log('SMS Sent'); // successful response
});
//set the return parameters **including the correct answer**
event.response.publicChallengeParameters = {};
event.response.privateChallengeParameters = {};
event.response.privateChallengeParameters.answer = answer;
event.response.challengeMetadata = 'PASSWORDLESS_CHALLENGE';
}
//Return to Amazon Cognito
callback(null, event);
}Trigger#3 -验证auth质询响应
exports.handler = (event, context, callback) => {
if (event.request.privateChallengeParameters.answer == event.request.challengeAnswer) {
event.response.answerCorrect = true;
} else {
event.response.answerCorrect = false;
}
// Return to Amazon Cognito
callback(null, event);
}https://stackoverflow.com/questions/52114361
复制相似问题