Код: Выделить всё
private func loginCognito(data: AWSConfigData) async throws {
let loginsKey = "cognito-idp.\(data.region).amazonaws.com/\(data.userPoolId)"
let logins = [loginsKey: data.idToken]
let identityProviderManager = IdentityProviderManager(loginMaps: logins)
let credentialsProvider = AWSCognitoCredentialsProvider(
regionType: data.regionType,
identityPoolId: data.identityPoolId,
identityProviderManager: identityProviderManager
)
return try await withCheckedThrowingContinuation { continuation in
credentialsProvider.identityProvider.logins().continueWith { task in
if let result = task.result, let token = result[loginsKey] as? String {
print("Login with Token:", token)
self.awsConfigData = data
let configuration = AWSServiceConfiguration(
region: data.regionType,
credentialsProvider: credentialsProvider
)
AWSServiceManager.default()?.defaultServiceConfiguration = configuration
Task {
let currentToken = try await self.getLoginsToken()
print("Current Token:", currentToken)
}
return continuation.resume(returning: ())
} else if let error = task.error {
return continuation.resume(throwing: error)
} else {
let error = NSError(domain: "S3Error", code: -1, userInfo: [NSLocalizedDescriptionKey: "Get login error"])
return continuation.resume(throwing: error)
}
}
}
}
/// IdentityProviderManager for AWS Cognito
private class IdentityProviderManager: NSObject, AWSIdentityProviderManager {
private let loginMaps: [String: String]
init(loginMaps: [String: String]) {
self.loginMaps = loginMaps
}
func logins() -> AWSTask {
return AWSTask(result: loginMaps as NSDictionary)
}
}
Код: Выделить всё
private func getLoginsToken() async throws -> String {
guard let configuration = AWSServiceManager.default().defaultServiceConfiguration,
let credentialsProvider = configuration.credentialsProvider as? AWSCognitoCredentialsProvider,
let awsConfigData else {
let error = NSError(domain: "S3Error", code: -1, userInfo: [NSLocalizedDescriptionKey: "Cannot get credentialsProvider"])
print("Token Error:", error)
throw error
}
return try await withCheckedThrowingContinuation { continuation in
credentialsProvider.identityProvider.logins().continueWith { task in
let loginsKey = "cognito-idp.\(awsConfigData.region).amazonaws.com/\(awsConfigData.userPoolId)"
if let result = task.result, let token = result[loginsKey] as? String {
print("Token:", token)
return continuation.resume(returning: token)
} else if let error = task.error {
print("Token Error:", error)
return continuation.resume(throwing: error)
} else {
let error = NSError(domain: "S3Error", code: -1, userInfo: [NSLocalizedDescriptionKey: "Get login error"])
return continuation.resume(throwing: error)
}
}
}
}
На первом входе в систему, войдите с токеном и текущим токеном - это то же самое. остается таким же, как и первое вход. очень ценится! Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/795 ... irst-login
Мобильная версия