【问题标题】:AWS Cognito Test EnvironmentAWS Cognito 测试环境
【发布时间】:2017-05-15 06:21:26
【问题描述】:

我目前正在使用 AWS Cognito 来管理我们应用程序的用户身份验证。我遇到的一个问题是找到一种实现“测试”或“质量保证”环境的好方法。

我的 API 有很多自动化测试,这些测试将使用随机数据创建用户。显然,我不想让 Cognito 在这种环境中发送实际的 SMS 或电子邮件消息。此外,在进行手动测试时,我们将使用虚假电话号码和电子邮件创建大量用户。有什么方法可以将用户池转换为“开发”模式,所有消息都会以某种方式记录下来?

【问题讨论】:

    标签: amazon-web-services amazon-cognito


    【解决方案1】:

    您可以编写一个预注册 lambda 函数并通过设置 autoConfirmUser 标志在 lambda 函数中自动确认用户。在这种情况下,Cognito 不会发送任何带有确认码的短信或电子邮件。下面的示例 lambda 来自文档 (http://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html#aws-lambda-triggers-pre-registration-example)。

    exports.handler = function(event, context) {
        // This Lambda function returns a flag to indicate if a user should be auto-confirmed.
    
        // Perform any necessary validations.
    
        // Impose a condition that the minimum length of the username of 5 is imposed on all user pools.
        if (event.userName.length < 5) {
            var error = new Error('failed!');
            context.done(error, event);
        }
    
        // Access your resource which contains the list of emails of users who were invited to sign up
    
        // Compare the list of email IDs from the request to the approved list
        if(event.userPoolId === "yourSpecialUserPool") {
            if (event.request.userAttributes.email in listOfEmailsInvited) {
                event.response.autoConfirmUser = true;
            }
        }
        // Return result to Cognito
        context.done(null, event);
    };
    

    【讨论】:

    • 如果用户的电话号码或电子邮件稍后更新会怎样? autoConfirmUser 标志是否也会阻止他们获得任何重新验证消息?
    • 实际上,我们最近还在 presignup lambda 中添加了验证电子邮件和验证电话号码的功能。您基本上需要在 lambda 中设置 autoVerifyEmail 和 autoVerifyPhone ,它们将得到验证。我猜当你尝试验证属性时,你会得到代码。
    【解决方案2】:

    这是我在 AWS Cognito 中创建一个“暂存”环境用户池所做的,它不会向用户发送真正的通知。实际上涉及到几个不同的部分,但我认为我能够涵盖所有内容。话虽如此,如果 Cognito 简单地提供一个用户池设置来关闭所有通知,那肯定会很好,这样我就不必将特定于环境的逻辑写入我的代码中。

    阻止用户邀请

    在我们的应用中,我们使用 AdminCreateUser 函数来创建被其他用户邀请的用户。此功能通常会向新用户的电话号码或电子邮件发送邀请消息。为了防止这些邀请,您可以提供MessageAction: 'SUPPRESS' 作为函数参数的参数。像这样:

    let params = {
        UserPoolId: config.cognitoUserPoolId,
        Username: uuid.v4(),
        MessageAction: 'SUPPRESS', /* IMPORTANT! */
        TemporaryPassword: user.phone_number.slice(-6),
        UserAttributes: [
            { Name: 'given_name', Value: user.first_name },
            { Name: 'family_name', Value: user.last_name },
            { Name: 'phone_number', Value: user.phone_number }
        ]
    };
    
    cognito.adminCreateUser(params).promise().then(data => {
        console.log(data);
    });
    

    这里的官方文档:http://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html

    阻止用户属性更新验证

    在我们的生产应用中,我们希望用户在电话号码或电子邮件发生变化时必须重新验证。但在我们的暂存环境中,我们实际上并不需要这个。因此取消选中“您想要验证电子邮件或电话号码吗?”下方的电子邮件和电话复选框。用户池设置中的部分。

    【讨论】:

    • 感谢您的回答,我们正在努力寻找有关为不同环境创建用户池的良好做法的相关信息。在理想情况下,我们将为每个环境(开发、阶段、产品)创建一个用户池,每个环境创建一个用户池 API 授权者,每个环境创建一个 API 网关阶段。您对此有何经验?您是否有可以指导我们的参考资料?
    猜你喜欢
    • 2023-02-05
    • 2016-02-02
    • 1970-01-01
    • 2019-06-21
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    相关资源
    最近更新 更多