【问题标题】:AWS Cognitio Swift 3 Identity not found未找到 AWS Cognito Swift 3 身份
【发布时间】:2017-01-04 21:48:53
【问题描述】:

按照 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 失败。错误是[错误 域=com.amazonaws.AWSCognitoIdentityErrorDomain 代码=10“(空)” UserInfo={__type=ResourceNotFoundException, message=Identity 'eu-west-1:xxxxxxx' not found.}] AWSiOSSDK v2.4.16 [错误] AWSCredentialsProvider.m 行:577 | __44-[AWSCognitoCredentialsProvider 凭证]_block_invoke.353 |无法刷新。错误是[错误 域=com.amazonaws.AWSCognitoIdentityErrorDomain 代码=10“(空)” UserInfo={__type=ResourceNotFoundException, message=Identity 'eu-west-1:937fe0c4-974b-4f77-a835-425e1d9d9e00' 未找到。}] 登录 登录提供者结果 = nil,错误 = 可选(错误 域=com.amazonaws.AWSCognitoIdentityErrorDomain 代码=10“(空)” UserInfo={__type=ResourceNotFoundException, message=Identity 'eu-west-1:xxxxxxxxx' 未找到。})

【问题讨论】:

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


    【解决方案1】:

    似乎找不到用户的身份池 ID。这与找不到用户池 ID 不同,后者是整个用户池的 ID。缺少的 ID 似乎是用户设备本身的 ID。

    如果您想要 Cognito > Federated Identities 并手动删除身份 ID,则可能会发生这种情况。无法检索它,因此您必须执行以下操作:

    如果您在模拟器上运行此程序并希望快速修复,请单击硬件 > 擦除所有内容和设置。请注意,这样做会很明显,但也会强制 SDK 为您获取新的身份 ID。

    如果您在移动设备上运行此功能或想要更好的解决方案,您仍然必须强制 SDK 获取新的身份 ID。通过清除钥匙串来做到这一点。然后调用 getIdentityId 来获取一个新 ID - 这就是它的工作原理:

    "获取/检索此提供者的身份 ID。如果已在此提供者上设置了身份 ID,则不会进行远程调用,并且身份将作为 AWSTask 的结果返回(身份 ID 也可用作属性)。如果没有在此提供者上设置 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】:

      “我可以在后端看到它”是指在 Cognito 身份浏览器中吗?我从您的消息中获取了身份 ID,但在 Cognito 数据存储中找不到它。你如何验证它的存在?

      尝试清除您的凭据提供程序并重试,一些奇怪的元数据可能卡在里面。

      【讨论】:

        【解决方案3】:

        对于遇到类似 JS 问题的其他人,您可以从开发者控制台中的 Application > Local Storage 中清除内容,找到导致错误的 USER 的 Identity Pool UserID 并将其从存储中删除。

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

        【讨论】:

          猜你喜欢
          • 2016-12-11
          • 2016-10-17
          • 2019-04-21
          • 2014-10-04
          • 2016-10-02
          • 2017-11-05
          • 2017-03-25
          • 2016-05-26
          • 2018-01-29
          相关资源
          最近更新 更多