I've made some minor updates to my code, and it seems to be working now. However, I wanted to ask if there's a better way to handle the login configuration for AWSCognitoCredentialsProvider
.
Here’s my updated loginCognito
function:
private func loginCognito(data: AWSConfigData) {
let loginsKey = "cognito-idp.\(data.region).amazonaws.com/\(data.userPoolId)"
let logins = [loginsKey: data.idToken]
self.awsConfigData = data
printAWS(addition: "Login with Token:", message: "\(data.idToken)")
// If defaultServiceConfiguration is already set, update loginMaps
if let existingCredentialsProvider = AWSServiceManager.default()?.defaultServiceConfiguration?.credentialsProvider as? AWSCognitoCredentialsProvider,
let existingIdentityProviderManager = existingCredentialsProvider.identityProvider.identityProviderManager as? IdentityProviderManager {
existingIdentityProviderManager.setLogins(loginMaps: logins)
return
}
let identityProviderManager = IdentityProviderManager(loginMaps: logins)
let credentialsProvider = AWSCognitoCredentialsProvider(
regionType: data.regionType,
identityPoolId: data.identityPoolId,
identityProviderManager: identityProviderManager
)
// Set AWS default configuration
let configuration = AWSServiceConfiguration(
region: data.regionType,
credentialsProvider: credentialsProvider
)
AWSServiceManager.default()?.defaultServiceConfiguration = configuration
}
And my IdentityProviderManager
:
private class IdentityProviderManager: NSObject, AWSIdentityProviderManager {
private var loginMaps: [String: String]
init(loginMaps: [String: String]) {
self.loginMaps = loginMaps
}
func setLogins(loginMaps: [String: String]) {
self.loginMaps = loginMaps
}
func logins() -> AWSTask<NSDictionary> {
return AWSTask(result: loginMaps as NSDictionary)
}
}
Is there a better approach to updating logins
dynamically in AWSCognitoCredentialsProvider
?
Would it be more efficient to manage this differently, or is this the best practice?
Thanks in advance!