Я использую AWS Cognito, интегрированный с приложением iOS через MobileHub, для входа через Facebook. Все работает нормально, пока я не выйду из существующей учетной записи и не попытаюсь войти в систему с другой учетной записью FB (или даже с той же самой).
В этом случае я получаю эту ошибку каждый раз, когда вызываю любую AWS Lambda:
AWSiOSSDK v2.4.9 [Ошибка] Строка AWSCredentialsProvider.m: 577.
[Учетные данные AWSCognitoCredentialsProvider].
Не удалось обновить. Ошибка [Error Domain = com.amazonaws.AWSCognitoIdentityErrorDomain Code = 8 "(null)" UserInfo = {__ type = NotAuthorizedException, message = Доступ без аутентификации для этого пула идентификаторов не поддерживается.}]
Но если я закрою и перезапущу приложение, все снова будет работать правильно.
Эта ошибка возникает
Читая код AWS SDK, я вижу, что это происходит из-за того, что когнитивная идентификация не получает логины от поставщика учетных данных здесь: Думаю, этого и следовало ожидать, поскольку я вышел из системы. Но проблема в том, что даже после входа в FB AWS по-прежнему считает меня Несанкционированным. Из аналогичных вопросов на StackOverflow я вижу, что в прошлом люди вручную устанавливали словарь логинов на AWSCognitoCredentialsProvider. Но теперь это свойство устарело, и другие подобные свойства доступны только для чтения. Вот моя установка AWS в методе AppDelegate didFinishLaunchingWithOptions: И вот код выхода: Обратите внимание, что я пробовал как очистить брелок, так и не делать этого. Результат тот же. Буду очень признателен за любую помощь! let cred = AWSCognitoCredentialsProvider(regionType: .euWest1, identityPoolId: "POOLID")
let config = AWSServiceConfiguration(region: .euWest1, credentialsProvider: cred)
AWSServiceManager.default().defaultServiceConfiguration = config
if let config = config {
config.timeoutIntervalForRequest = 30
config.timeoutIntervalForResource = 30
config.maxRetryCount = 3
AWSLambdaInvoker.register(with: config, forKey: "key")
}
let mapperConfiguration = AWSDynamoDBObjectMapperConfiguration()
mapperConfiguration.saveBehavior = .updateSkipNullAttributes
AWSDynamoDBObjectMapper.register(with: config!, objectMapperConfiguration: mapperConfiguration, forKey: "updateObjectMapper")
AWSIdentityManager.defaultIdentityManager().logout { (result, error) in
if let cp = AWSServiceManager.default().defaultServiceConfiguration.credentialsProvider as? AWSCognitoCredentialsProvider {
cp.clearKeychain()
}
// Open login screen
}
С уважением, Алекс
UserInfo={__type=NotAuthorizedException, message=Unauthenticated access is not supported for this identity pool.}
, но все равно успешно выйти из системы, я не знаю почему. Какие-нибудь решения? - person stan liu   schedule 10.05.2017[[AWSIdentityManager defaultIdentityManager] logoutWithCompletionHandler:^(id result, NSError *error)
, появляется ошибка, о которой я упоминал выше. Мне нужно выполнить другую работу после того, как обнаружено, что при выходе из системы нет ошибок. Теперь я использую[[AWSIdentityManager defaultIdentityManager] isLoggedin]
вместо того, чтобы выполнять другую работу, когда я обнаруживаю, что пользователь вышел из системы в обработчике выше. - person stan liu   schedule 12.05.2017