0

按照 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 失败。错误是 [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=10 "(null)" UserInfo={__type=ResourceNotFoundException, message=Identity 'eu-west-1:xxxxxxx' not found.}] AWSiOSSDK v2.4.16 [错误] AWSCredentialsProvider.m 行:577 | __44-[AWSCognitoCredentialsProvider 凭证]_block_invoke.353 | 无法刷新。错误是 [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=10 "(null)" UserInfo={__type=ResourceNotFoundException, message=Identity 'eu-west-1:937fe0c4-974b-4f77-a835-425e1d9d9e00' not found.} ] 使用登录提供商登录结果 = nil, error = Optional(Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=10 "(null)" UserInfo={__type=ResourceNotFoundException, message=Identity 'eu-west-1:xxxxxxxxx'

4

3 回答 3

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

这就是诀窍!当我遇到同样的问题时为我工作。祝你好运!如果您对这种方法或一般情况有任何问题,请随时给我发消息。

于 2018-08-27T04:50:02.653 回答
0

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

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

于 2017-01-17T00:14:08.673 回答
0

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

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

于 2021-04-26T15:21:03.823 回答