我目前正在使用AWS Cognito来管理我们的应用程序的用户身份验证。我遇到的一个问题是找出实施“测试”或“qa”环境的好方法。
我的API有很多自动化测试,可以使用随机数据创建用户。显然,我不希望Cognito在此环境中发送实际的SMS或电子邮件消息。此外,在进行手动测试时,我们将使用假电话号码和电子邮件创建大量用户。有没有办法在“开发”模式下打开用户池,所有消息都以某种方式记录?
答案 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;用户池设置中的部分。