Amazon web services Cognito用户池中不同用户的相同标识Id

Amazon web services Cognito用户池中不同用户的相同标识Id,amazon-web-services,amazon-cognito,swift4,Amazon Web Services,Amazon Cognito,Swift4,我在CognitoUserPool中创建了两个用户(来自XCode模拟器),如 然后,我期待联邦身份中的身份浏览器为每个用户分配不同的唯一身份id。不幸的是,只有一个标识id,两个不同的帐户使用的数据(在dataset中)与中相同。我也用了下面问题中提到的方法。但我仍然有一个问题 我的应用程序内代码委托 let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil)

我在CognitoUserPool中创建了两个用户(来自XCode模拟器),如

然后,我期待联邦身份中的身份浏览器为每个用户分配不同的唯一身份id。不幸的是,只有一个标识id,两个不同的帐户使用的数据(在dataset中)与中相同。我也用了下面问题中提到的方法。但我仍然有一个问题

我的应用程序内代码委托

let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil)

// create pool configuration
let poolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "2xXx6X77x7X8YYyyy7X9",
                                                                        clientSecret: "f87as68a7f68adf6sa897f79af789a7fda8a7sd698",
                                                                        poolId: "us-east-1_XXXXXXXX")

// initialize user pool client
AWSCognitoIdentityUserPool.register(with: serviceConfiguration, userPoolConfiguration: poolConfiguration, forKey: "UserPool")

// fetch the user pool client we initialized in above step
let pool = AWSCognitoIdentityUserPool(forKey: "UserPool")
self.storyboard = UIStoryboard(name: "Main", bundle: nil)
pool.delegate = self

//SAVE & LOAD DATA TO AWS COGNITO SYNC
let credentialProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "us-east-1:xxxxxxx-xxxx-xxxx-xxxxxxxxx", identityProviderManager: pool)
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialProvider)

//credentialProvider.clearCredentials()


AWSServiceManager.default().defaultServiceConfiguration = configuration

我已尝试将
credentialProvider.clearCredentials()
添加到应用程序委托和注销函数中,但两者都无助于解决问题

尝试以下方法,看看是否能解决您的问题:

  • 打电话。这将清除所有保存的值-凭据和标识ID。使用assert检查IdentityId是否已清除
    assert(credentialsProvider.IdentityId==nil)
  • 在进行同步调用之前,请使用
    credentialsProvider.getIdentityId()
    获取标识id

  • 您如何注销您的用户?尝试使用signout()方法

  • 默认情况下,SDK会记住最后一个已知的用户。如果需要,请使用
    pool?.clearLastKnownUser()
    将其清除

  • 调用Cognito sync客户端的方法来擦除缓存数据

尝试以下方法,看看是否能解决您的问题:

  • 打电话。这将清除所有保存的值-凭据和标识ID。使用assert检查IdentityId是否已清除
    assert(credentialsProvider.IdentityId==nil)
  • 在进行同步调用之前,请使用
    credentialsProvider.getIdentityId()
    获取标识id

  • 您如何注销您的用户?尝试使用signout()方法

  • 默认情况下,SDK会记住最后一个已知的用户。如果需要,请使用
    pool?.clearLastKnownUser()
    将其清除

  • 调用Cognito sync客户端的方法来擦除缓存数据

My signout()方法如下<代码>func signOut(){let credentialProvider=AWSCognitoCredentialsProvider(regionType:.USEast1,identityPoolId:“us-east-1:XXXXXXXXXXXXXXXX 0”,identityProviderManager:pool)credentialProvider.clearCredentials()self.user?.signOut()self.title=nil self.response=nil self.collectionHome.reloadData()self.refresh()}当我用另一个设备(在模拟器中)与第二个帐户签名时,它为它创建了第二个身份id。现在,我当前的问题是,当我使用第一个帐户登录时,应用程序正在加载其数据集,在我使用第二个帐户注销并登录后,仍然在加载其以前的(第一个帐户的数据集)数据。在这里,如果在使用第二个帐户签名之前,我重新启动了应用程序,然后使用第二个帐户进行了签名,则会成功加载其数据集。idenity id或某些同步构造等对象正在被缓存。clearKeychain是否清除id(使用断言检查)?所以,即使在上述调用(擦除、clearKeychain等)之后,它仍然使用旧id?或者id是新的,但显示的是缓存的同步数据?“当我使用第一个帐户登录时,应用程序正在加载其数据集,在我使用第二个帐户注销并登录后,仍然在加载其以前的(第一个帐户的数据集)数据”-在这种情况下,请尝试打印标识id并查看正在使用哪一个您是对的,我已将credentialProvider.clearKeychain()和credentialProvider.clearCredentials()添加到我的signOut()方法中。此外,我在appdelegate中添加了print(credentialProvider.identityId)。在我注销并重新启动应用程序后,identity id仍然有值(第一个帐户的id,因为我已从中注销),我的signout()方法如下<代码>func signOut(){let credentialProvider=AWSCognitoCredentialsProvider(regionType:.USEast1,identityPoolId:“us-east-1:XXXXXXXXXXXXXXXX 0”,identityProviderManager:pool)credentialProvider.clearCredentials()self.user?.signOut()self.title=nil self.response=nil self.collectionHome.reloadData()self.refresh()}当我用另一个设备(在模拟器中)与第二个帐户签名时,它为它创建了第二个身份id。现在,我当前的问题是,当我使用第一个帐户登录时,应用程序正在加载其数据集,在我使用第二个帐户注销并登录后,仍然在加载其以前的(第一个帐户的数据集)数据。在这里,如果在使用第二个帐户签名之前,我重新启动了应用程序,然后使用第二个帐户进行了签名,则会成功加载其数据集。idenity id或某些同步构造等对象正在被缓存。clearKeychain是否清除id(使用断言检查)?所以,即使在上述调用(擦除、clearKeychain等)之后,它仍然使用旧id?或者id是新的,但显示的是缓存的同步数据?“当我使用第一个帐户登录时,应用程序正在加载其数据集,在我使用第二个帐户注销并登录后,仍然在加载其以前的(第一个帐户的数据集)数据”-在这种情况下,请尝试打印标识id并查看正在使用哪一个您是对的,我已将credentialProvider.clearKeychain()和credentialProvider.clearCredentials()添加到我的signOut()方法中。此外,我在appdelegate中添加了print(credentialProvider.identityId)。在我注销并重新启动应用程序后,身份id仍然有值(第一个帐户的id,因为我已从中注销)
let user = pool?.currentUser()    
user?.signOut()