diff --git a/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/CredentialStorage/AWSCognitoAuthCredentialStore.swift b/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/CredentialStorage/AWSCognitoAuthCredentialStore.swift index fa897dde68..50d4ce4925 100644 --- a/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/CredentialStorage/AWSCognitoAuthCredentialStore.swift +++ b/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/CredentialStorage/AWSCognitoAuthCredentialStore.swift @@ -83,8 +83,9 @@ struct AWSCognitoAuthCredentialStore { let oldUserPoolConfiguration = oldAuthConfigData.getUserPoolConfiguration() let oldIdentityPoolConfiguration = oldAuthConfigData.getIdentityPoolConfiguration() let newIdentityConfigData = currentAuthConfig.getIdentityPoolConfiguration() + let newUserPoolConfiguration = currentAuthConfig.getUserPoolConfiguration() - /// Only migrate if + /// Migrate if /// - Old User Pool Config didn't exist /// - New Identity Config Data exists /// - Old Identity Pool Config == New Identity Pool Config @@ -95,6 +96,19 @@ struct AWSCognitoAuthCredentialStore { if let oldCognitoCredentialsData = try? keychain._getData(oldNameSpace) { try? keychain._set(oldCognitoCredentialsData, key: newNameSpace) } + /// Migrate if + /// - Old config and new config are different + /// - Old Userpool Existed + /// - Old and new user pool namespacing is the same + } else if oldAuthConfigData != currentAuthConfig && + oldUserPoolConfiguration != nil && + UserPoolConfigurationData.isNamespacingEqual( + lhs: oldUserPoolConfiguration, + rhs: newUserPoolConfiguration) { + // retrieve data from the old namespace and save with the new namespace + if let oldCognitoCredentialsData = try? keychain._getData(oldNameSpace) { + try? keychain._set(oldCognitoCredentialsData, key: newNameSpace) + } } else if oldAuthConfigData != currentAuthConfig && oldNameSpace != newNameSpace { // Clear the old credentials diff --git a/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/StateMachine/CodeGen/Data/UserPoolConfigurationData.swift b/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/StateMachine/CodeGen/Data/UserPoolConfigurationData.swift index 098f8cc299..8f304142a7 100644 --- a/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/StateMachine/CodeGen/Data/UserPoolConfigurationData.swift +++ b/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/StateMachine/CodeGen/Data/UserPoolConfigurationData.swift @@ -57,6 +57,14 @@ struct UserPoolConfigurationData: Equatable { func getIdentityProviderName() -> String { return "cognito-idp.\(region).amazonaws.com/\(poolId)" } + + static func isNamespacingEqual( + lhs: UserPoolConfigurationData?, + rhs: UserPoolConfigurationData?) -> Bool { + return lhs?.poolId == rhs?.poolId + && lhs?.clientId == rhs?.clientId + && lhs?.region == rhs?.region + } } extension UserPoolConfigurationData: Codable { }