未找到AWS Cognitio Swift 3标识

时间:2017-01-04 21:48:53

标签: amazon-web-services swift3 amazon-cognito aws-mobilehub

当我尝试按照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'找不到。})

3 个答案:

答案 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文档:

http://aws.github.io/aws-sdk-ios/docs/reference//Classes/AWSCognitoCredentialsProvider.html#//api/name/clearKeychain

那就成功了!当我遇到同样的问题时,为我工作。祝好运!如果您对此方法有任何疑问,或者一般情况下,请随时与我联系。

答案 2 :(得分:0)

对于其他面临类似 JS 问题的人,您可以从开发者控制台中的应用程序 > 本地存储中清除内容,找到导致错误的用户的身份池用户 ID 并将其从存储中删除。

重新启动并重试。它应该可以工作。