要解决此问题,需创建一个Lambda函数,该函数在AWS Cognito用户池中创建的Lambda触发器中执行。该函数将检查电子邮件地址是否被设置为用于此用户的用户名,如果是,则将从电子邮件中提取名称作为用户名并将其更新到用户属性中。
以下是示例代码:
exports.handler = function(event, context) {
var username = event.userName;
var email = event.request.userAttributes.email;
if(username.indexOf('@') !== -1) {
var name = email.substring(0, email.indexOf('@'));
var newName = name.replace(/\W/g, '') + Math.floor(Math.random() * (1000 - 100 + 1) + 100);
event.userName = newName;
event.response.finalUserStatus = "CONFIRMED";
event.response.messageAction = "SUPPRESS";
}
context.done(null, event);
};
该函数将执行以下操作:
此解决方法将解决AWS Cognito用户迁移Lambda触发器,由于用户池配置了电子邮件别名,用户名不能为电子邮件格式这一问题。