AWS Cognito - 用户丢失 "non-mutable" 属性 "email_verified"

AWS Cognito - Users lost "non-mutable" attribute "email_verified"

使用 Cognito 几个月后,用户池中的一些用户现在失去了 "email_verified" 属性。我不明白它是如何丢失或如何恢复的。

症状是:

如果我尝试删除该属性(具有足够的权限),它会失败 - 正如人们所期望的那样 - 解释它是不可改变的。

aws cognito-idp admin-delete-user-attributes --user-pool-id MYID-123 --username test2@test.com --user-attribute-names email_verified

An error occurred (InvalidParameterException) when calling the AdminDeleteUserAttributes operation: Cannot modify the non-mutable attribute email_verified

除了责怪 AWS Cognito,我找不到这个问题的原因。

一个workaround/hack/patch是把属性加回来,这次,non-mutable check没问题

aws cognito-idp admin-update-user-attributes --user-pool-id MYID-123 --username error@bla.com --user-attributes Name=email_verified,Value=true

现在用户又拥有了属性,我可以重新设置密码了。

如果有 2 位用户使用相同的电子邮件地址,并且 email_verified 对其中一个为真而不对另一个为真,则可能是您的客户端代码存在问题。

当您调用 confirmRegistration 时,第一个参数是确认码,第二个是布尔值:forceAliasCreation。如果设置为 true,则如果用户已经存在用于注册的电子邮件地址,则新用户 "steals" 现有用户的电子邮件地址。

这不是一个明显的问题,因为 Cognito API 文档显示了 confirmRegistration 的示例,其中 forceAliasCreation 为 true 并且没有解释参数的作用(https://github.com/aws-amplify/amplify-js/tree/master/packages/amazon-cognito-identity-js - 用例 2,假设您使用的是 JS)。我们 运行 在我们的应用程序中遇到了这个问题,这是罪魁祸首。