当我尝试按照aws的建议调用签名时,我按照移动中心介绍在应用中设置我的AWSCognito。它说身份没有找到。身份在用户池中我可以在后端看到它也标记为已验证。为什么会出现这个错误?
代码:
func handleLoginWithSignInProvider(signInProvider: AWSSignInProvider) {
AWSIdentityManager.defaultIdentityManager().loginWithSign(signInProvider, completionHandler:
{(result: Any?, error: Error?) -> Void in
if error == nil {
/* Handle successful login. */
print("success")
}
print("Login with signin provider result = \(result), error = \(error)")
})
}
错误:
GetCredentialsForIdentity失败。错误是[错误 Domain = com.amazonaws.AWSCognitoIdentityErrorDomain Code = 10“(null)” UserInfo = {__ type = ResourceNotFoundException,message = Identity 'eu-west-1:xxxxxxx'未找到。}] AWSiOSSDK v2.4.16 [错误] AWSCredentialsProvider.m行:577 | __44- [AWSCognitoCredentialsProvider凭证] _block_invoke.353 |无法刷新。错误是[错误 Domain = com.amazonaws.AWSCognitoIdentityErrorDomain Code = 10“(null)” UserInfo = {__ type = ResourceNotFoundException,message = Identity 'eu-west-1:937fe0c4-974b-4f77-a835-425e1d9d9e00'找不到。}]登录 with signin provider result = nil,error = Optional(错误 Domain = com.amazonaws.AWSCognitoIdentityErrorDomain Code = 10“(null)” UserInfo = {__ type = ResourceNotFoundException,message = Identity 'eu-west-1:xxxxxxxxx'找不到。})
答案 0 :(得分:0)
通过“我可以在后端看到它”,您的意思是在Cognito身份浏览器中吗?我从您的邮件中获取了身份ID,但我找不到它存储在Cognito数据存储中。你是如何验证它存在的?
尝试清除您的凭据提供程序并再试一次,一些奇怪的元数据可能已经卡在里面。
答案 1 :(得分:0)
似乎没有找到该用户的身份池ID。这与找不到用户池ID(这是整个用户池的ID)不同。缺少的ID似乎是用户设备本身的ID。
如果您想Cognito>联合身份并手动删除了身份ID,则可能发生了这种情况。无法检索它,因此您必须执行以下操作:
如果您正在模拟器上运行此软件并需要快速修复,请单击硬件>擦除所有内容和设置。请注意,这样做很明显,但也会迫使SDK为您提供新的身份ID。
如果您正在移动设备上运行此程序或想要更好的修复程序,则仍必须强制SDK获取新的身份ID。为此,请清除钥匙串。然后调用getIdentityId以获取新的ID-这是可行的原因:
“获取/获取此提供程序的身份ID。如果已经在此提供程序上设置了身份ID,则不会进行远程调用,并且由于AWSTask的缘故,将返回该身份(identityId也可以作为属性)。如果未在此提供程序上设置identityId,则将从服务中检索一个。”
看到您正在使用swift,请按以下步骤操作:
if error == nil {
print("success")
} else {
if let errorDescription = error?.localizedDescription {
if errorDescription == "The operation couldn’t be completed. (com.amazonaws.AWSCognitoIdentityErrorDomain error 10.)" {
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "yourIdentityPoolId")
credentialsProvider.clearKeychain()
credentialsProvider.getIdentityId()
}
}
}
有关更多信息,请查看此有用的AWS线程:
https://forums.aws.amazon.com/thread.jspa?threadID=249749
此外,请查看AWSCredentialsProvider上的AWS文档:
那就成功了!当我遇到同样的问题时,为我工作。祝好运!如果您对此方法有任何疑问,或者一般情况下,请随时与我联系。
答案 2 :(得分:0)
对于其他面临类似 JS 问题的人,您可以从开发者控制台中的应用程序 > 本地存储中清除内容,找到导致错误的用户的身份池用户 ID 并将其从存储中删除。
重新启动并重试。它应该可以工作。