使用Cognito几个月后,用户池中的某些用户现在失去了“ email_verified”属性。我不明白它是怎么丢失的或如何恢复的。
症状是:
使用list-users CLI获取用户的用户属性显示该属性丢失
aws cognito-idp list-users --user-pool-id MYID-123 --query 'Users[?Username==`error@bla.com`].[*]'
[
[
[
"error@bla.com",
true,
"CONFIRMED",
1522127817.526,
1522127819.369,
[
{
"Name": "sub",
"Value": "123123123341241238"
},
{
"Name": "email",
"Value": "bla@bla.com"
}
]
]
]
]
vs。具有适当属性的一个
aws cognito-idp list-users --user-pool-id MYID-123 --query 'Users[?Username==`bla@bla.com`].[*]'
[
[
[
"bla@bla.com",
true,
"CONFIRMED",
1524048734.588,
1524048737.777,
[
{
"Name": "sub",
"Value": "1231231231231235"
},
{
"Name": "email_verified",
"Value": "true"
},
{
"Name": "email",
"Value": "bla@bla.com"
}
]
]
]
]
如果我尝试删除该属性(具有足够的权限),则该属性将失败-正如人们所期望的那样-说明该属性是不可变的。
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
答案 0 :(得分:0)
除了归咎于AWS Cognito之外,我找不到导致此问题的原因。
一种解决方法/破解/补丁是重新添加属性,这一次,非可变检查不是问题
aws cognito-idp admin-update-user-attributes --user-pool-id MYID-123 --username error@bla.com --user-attributes Name=email_verified,Value=true
现在用户再次具有该属性,我可以重置密码。
答案 1 :(得分:0)
如果有2个用户具有相同的电子邮件地址,并且email_verified
对一个用户(而不是另一个用户)为true,则可能是您的客户端代码有问题。
调用confirmRegistration
时,第一个参数是确认码,第二个参数是布尔值:forceAliasCreation
。如果设置为true,那么如果用户已经存在用于注册的电子邮件地址,则新用户将“窃取”现有用户的电子邮件地址。
这不是很明显的问题,因为Cognito API文档显示了confirmRegistration
为forceAliasCreation
为真的示例public static DBHelperClass getInstance(Context context) {
int i = 0;
while (i < 2) {
if (mInstance == null) {
try {
mInstance = new DBHelperClass(context.getApplicationContext());
db = mInstance.getWritableDatabase();
break;
} catch (Exception e) {
e.printStackTrace();
try {
if (mInstance != null) {
mInstance.close();
mInstance = null;
i++;
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
return mInstance;
}
并没有解释参数的作用(https://github.com/aws-amplify/amplify-js/tree/master/packages/amazon-cognito-identity-js-用例2,假设您正在使用JS)。我们的应用程序遇到了这个问题,这是罪魁祸首。