首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个登录选项的aws认知池

具有多个登录选项的aws认知池
EN

Stack Overflow用户
提问于 2018-08-31 11:18:52
回答 1查看 2.3K关注 0票数 7

我有一个移动应用程序,并想使用AWS认知池进行用户管理(注册和注册)。我想提供以下3个选项供用户登录到我的应用程序

  1. 用户名,密码
  2. 带有OTP登录的电话号码--在屏幕上的标志上,用户输入他的电话号码,科尼托应该发送OTP代码,在验证时,它应该允许登录。
  3. Google连接登录

在注册过程中,用户将设置用户名、密码和添加已验证的电话号码,并且可以选择将他们的google连接添加到他们的配置文件中。

如何为该场景设置认知池,用户可以选择上述3种选项中的任何一种来登录应用程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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挑战性

代码语言:javascript
复制
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角色

代码语言:javascript
复制
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质询响应

代码语言:javascript
复制
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);
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52114361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档