如何从ios中的缓存中清除Cognito Id

问题描述:

以新用户身份登录时退出iOS应用程序后getIdentityId()返回上一个用户的Cognito Id。如何从ios中的缓存中清除Cognito Id

是否有人在iOS中使用AWSCognito获得了多用户帐户?

Cognit Id存储在钥匙串中。您可以使用AWS iOS SDK清除钥匙串,彻底摆脱旧的Cognito Id。例如:

// check if a Cognito Id exists  
if identityProvider.identityId != nil { // AWSCognitoCredentialsProvider 
    // delete the old Cognito Id 
    identityProvider.clearKeychain() 
    assert(identityProvider.identityId == nil) 
} 

// Get a new Cognito identity 
let task: AWSTask = identityProvider.getIdentityId() 
task.continueWithBlock { (task) -> AnyObject? in 
    if let error = task.error { 
     completion(error: error) 
    } else { 
     // The new cognito identity token is now stored in the keychain. 
    } 
} 
+0

感谢彼得。这是我打电话的代码。但是,如果以其他用户身份登录,则应用程序可以访问先前用户的认知数据。但是,如果我在调用identityProvider.clearKeychain()后退出应用程序,然后重新启动并以第二个用户身份登录,则一切正常,第二个应用程序实例无法访问第一个用户的认知数据。 – Carl

+0

缓存的AWS凭证是否仍在使用? AWSCognitoCredentialsProvider api http://docs.aws.amazon.com/AWSiOSSDK/latest/Classes/AWSCognitoCredentialsProvider.html#//api/name/credentials具有函数clearCredentials和invalidateCachedTemporaryCredentials。 –

+0

这是我的想法,所以我打电话给所有人3.按照以下顺序:invalidateCachedTemporaryCredentials(),clearCredentials(),clearKeychain()。你在iOS上使用Cognito吗? – Carl

使用此移动中心帮手https://github.com/aws/aws-mobilehub-helper-ios/issues/14

但那只是由AWSSignInProviders对谷歌和Facebook存储在NSUserDefaults的数据时,我并报告了类似的问题,我没有遇到能够同步来自不同身份标识的数据。你确定这是你所看到的吗?

一个评论,如果您使用不同的身份验证提供你可能会意外地合并这两个身份(登录与谷歌则与Facebook)。因此,请确保您正在查看不同的身份标识,因为如果它们合并,那么它们会合并它们的同步数据集。

最后... getIdentityId不足以切换身份。你需要通过一个调用来获得凭证,如果不是凭证永远不会去,并且使用你的identityProviderManager调用“登录”并获得新的认证状态。 - 所以登录是get-id,后面是获取id的凭证。退出将是相同的,如果你想成为一个未认证用户(注销,以便您登录字典是空的,然后GETID,getcredentials ...你将有未认证的凭据。)

+0

谢谢。我只会使用一个身份验证提供程序(Auth0)。仍然有相同的行为(aws sdk 2.5.1)。但是,如果我在注销后崩溃或关闭了我的应用程序,那么下一个用户登录时,将无干涉地访问以前用户的cognitosync数据。 – Carl