在iOS SDK(v2.4.8)中,我無法註銷用戶,然後以其他用戶身份正確登錄。如何強制AWS Cognito從服務器檢索IdentityId?
的(正確的)cognityIdentityId由AWS針對第一用戶(因爲一個應用程序開始)返回也被返回給所述第二用戶(除非該應用被重新啓動)。這使得另一個用戶可以訪問一個用戶的AWSCognitoDataset。
我想這是因爲iOS SDK中已經緩存的ID和記錄呼叫清除緩存,並不能完全工作。
登錄時:
// one-off initialisation
self.credentialsProvider = AWSCognitoCredentialsProvider(regionType:AWSRegionType.USEast1,identityPoolId:Constants.CognitoIdentityPoolId) 設配置= AWSServiceConfiguration(區域:AWSRegionType.USEast1,credentialsProvider:self.credentialsProvider ) AWSServiceManager.defaultServiceManager()。defaultServiceConfiguration = configuration ... //我從我的外部提供者serice(Auth0)獲得idToken func doAmazonLogin(idToken:String,success:() - >(),_ failure:(N SError) - >()){ var task:AWSTask?
//Initialize clients for new idToken
if self.credentialsProvider?.identityProvider.identityProviderManager == nil || idToken != Application.sharedInstance.retrieveIdToken() {
let logins = [Constants.CognitoIDPUrl: idToken]
task = self.initializeClients(logins)
} else {
//Use existing clients
self.credentialsProvider?.invalidateCachedTemporaryCredentials()
task = self.credentialsProvider?.getIdentityId()
}
//Make login
task!.continueWithBlock { (task: AWSTask!) -> AnyObject! in
if (task.error != nil) {
failure(task.error!)
} else {
// the task result will contain the identity id
let cognitoId:String? = task.result as? String
self.customIdentityProviderManager!.addToken(Constants.CognitoIDPUrl, value:idToken)
//Store Cognito token in keychain
Application.sharedInstance.storeCognitoToken(cognitoId)
success()
}
return nil
}
}
func initializeClients(logins: [NSObject:AnyObject]?) -> AWSTask? {
//Create identity provider managet with logins
let manager = CustomIdentityProviderManager(tokens: logins!)
self.credentialsProvider?.setIdentityProviderManagerOnce(manager)
return self.credentialsProvider?.getIdentityId()
}
當註銷:
// Clear ALL saved values for this provider (identityId, credentials, logins). [docs][1]
let keychain = A0SimpleKeychain(service:"…")
keychain.clearAll()
我也嘗試添加:
credentialsProvider!.clearCredentials()
credentialsProvider!.clearKeychain()
使用AWS的iOS SDK和任何人有編碼的註銷成功使得新用戶可以乾淨地登錄?
還有就是名字古怪的方法credentialsProvider.setIdentityProviderManagerOnce()
- 我無法找到這個文件,但它的名字所暗示的,它只能被稱爲每個會話一次。但是,如果keychain.clearAll()
刪除logins
一會又需要每一個新用戶,以登錄到每個時間設定logins
時間打電話setIdentityProviderManagerOnce
。
我已經添加代碼段我問:我要實現的是允許被註銷的賬戶。然後如果一個不同的用戶帳戶登錄,以獲得不同的cognitoIdentityId。即我不希望第二個帳戶被第一個帳戶合併或污染。目前,應用程序需要在「註銷」後重新啓動,重新啓動後,登錄過程得到正確的cognitoIdentityId。沒有重新啓動,第二次登錄獲取第一個帳戶的認證身份Id – Carl
它看起來像你使用身份驗證身份,設置登錄。這在登錄時應該總是給你相同的ID。重啓的情況下是不是在請求中設置一個令牌,但是非重啓是? –
我只是建議,因爲clearKeyChain是要註銷的方式。它會對所有的東西進行覈對 –