AWS Cognito测试环境

时间:2016-12-31 02:22:46

标签: amazon-web-services amazon-cognito

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

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

2 个答案:

答案 0 :(得分:2)

您可以编写预注册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);
};

答案 1 :(得分:2)

这是我创建一个&#34; staging&#34; 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

阻止用户属性更新验证

在我们的制作应用中,我们希望用户必须重新验证其电话号码或电子邮件是否发生变化。但在我们的临时环境中,我们并不需要这样做。所以取消选中电子邮件和电话的框,在“#34;您是否要求验证电子邮件或电话号码?&#34;用户池设置中的部分。

User Pool Settings