我想在通过Amazon Cognito中的Migrate User Lambda Trigger将用户从一个用户池迁移到另一个用户池时修改电子邮件地址。
我正在运行用户迁移,而没有借助this article来操纵电子邮件地址。 lambda函数在Node.js 12.x环境中运行,并且源和目标用户池都使用电子邮件作为唯一的用户名属性进行配置:
我的迁移用户响应参数如下:
{
userAttributes: {
email: 'foo@bar.com', // --> the manipulated email address
email_verified: 'true'
},
finalUserStatus: 'CONFIRMED',
messageAction: 'SUPPRESS'
}
这会导致“由于用户名属性是电子邮件,用户电子邮件应该为空或与用户名相同。” 尝试迁移(即登录)时出现错误消息。因此,我遵循了此消息,并添加了经过处理的电子邮件地址作为用户名:
{
userAttributes: {
email: 'foo@bar.com',
email_verified: 'true',
username: 'foo@bar.com'
},
...
}
现在会出现“无效的用户名或缺少电子邮件/电话号码/首选用户名属性” 错误消息。根据{{3}},这是预期的行为:
如果选择电子邮件作为别名,则用户名不能与有效的电子邮件格式匹配。
由于我不知道如何解决此问题,因此给了我一个机会,并更改了用户池配置,以便使用用户名和电子邮件地址进行注册: this documentation
由于上面提到的第一个响应参数现在导致“用户名不能为电子邮件格式,因为用户池已配置为电子邮件别名。” 错误消息,我将用户名设置为源用户(通过 API检索):
{
userAttributes: {
email: 'foo@bar.com',
email_verified: 'true',
username: user.username
},
...
}
这再次导致出现“无效的用户名或缺少电子邮件/电话号码/ preferred_username属性” 错误消息。
我已经考虑过在另一个(随后的)Lambda触发器(例如AdminGetUser)中操作电子邮件,但是对于您在迁移用户Lambda触发器中完成电子邮件处理的帮助,我们深表感谢。