AWS Cognito Swift: текущий токен не обновляется после первого входа в системуIOS

Программируем под IOS
Ответить
Anonymous
 AWS Cognito Swift: текущий токен не обновляется после первого входа в систему

Сообщение Anonymous »

Я использую AWS Cognito для аутентификации в моем приложении для iOS с Swift. Ниже приведена функция logincognito , которую я использую для аутентификации пользователей:

Код: Выделить всё

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)
}
}
Это моя функция getloginstoken для извлечения текущего токена:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»