0

Я использую AWS Cognito, интегрированный с приложением iOS через MobileHub для входа через Facebook. Все работает нормально, пока я не выхожу из существующего идентификатора и не пытаюсь войти в систему с другой учетной записью FB (или даже с тем же).
В этом случае я получаю эту ошибку, каждый раз, когда я называю любой AWS Lambda:AWS Cognito iOS. Ошибка без аутентификации после выхода из системы

AWSiOSSDK v2.4.9 [Error] AWSCredentialsProvider.m линия: 577.
[AWSCognitoCredentialsProvider credentials].
Невозможно обновить. Ошибка [Error Domain = com.amazonaws.AWSCognitoIdentityErrorDomain Code = 8 "(нуль)" UserInfo = {__ тип = NotAuthorizedException, сообщение = Unauthenticated доступ не поддерживается для этого удостоверения пула.}]

Но если прекратить и перезапустите приложение, все снова работает правильно.

Эта ошибка возникает here:

От чтения AWS SDK кода я вижу, что это происходит потому, что личность Cognito не получает логины от учетных данных поставщика here:

Я предполагаю, что это, как ожидается, так как я вышли из системы. Но проблема в том, что даже после входа в 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 
} 

Пожалуйста, обратите внимание, что я попытался как очищающий брелка и не делать. Результат тот же.

Я очень благодарен за любую помощь!
С уважением, Alex

+0

Я использую тот же AWSIdentityManager, выполняющий выход из системы, и у вас есть некоторые проблемы, подобные вам. Он показывает '' 'UserInfo = {__ type = NotAuthorizedException, message = Unauthenticated access не поддерживается для этого пула идентификаторов.}' '' Но все же выход из системы не знаю почему. Любые решения? –

+0

Какая услуга дает вам эту ошибку? Некоторые AWSLambda? Или AWSIdentityManager сам? –

+0

AWSIdentityManager. И он имеет дело с пользовательским логином, как шармом, но когда я выхожу из системы с помощью '[[AWSIdentityManager defaultIdentityManager] logoutWithCompletionHandler:^(результат ID, ошибка NSError *)' Появилась ошибка, о которой я упоминал выше. Мне нужно выполнить другую работу после обнаружения выхода без ошибок. Теперь я использую '[[AWSIdentityManager defaultIdentityManager] isLoggedin]' вместо этого выполнять другое задание, когда обнаруживаю, что пользователь выходит из обработчика выше. –

ответ

0

Выполняете ли вы это при внедрении метода входа?

- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins { 
    FBSDKAccessToken* fbToken = [FBSDKAccessToken currentAccessToken]; 
    if(fbToken){ 
     NSString *token = fbToken.tokenString; 
     return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : token }]; 
    }else{ 
      return [AWSTask taskWithError:[NSError errorWithDomain:@"Facebook Login" 
                  code:-1 
                 userInfo:@{@"error":@"No current Facebook access token"}]]; 
    } 
} 

More details.

+0

Привет, Рашит! Я не использую пользовательский AWSIdentityProviderManager для инициализации AWSCognitoCredentialsProvider, как вы можете видеть из моего кода. Поэтому у меня нет собственной реализации метода «логинов». Вместо этого я использую [расширенный] (http: // docs.aws.amazon.com/cognito/latest/developerguide/authentication-flow.html), который полагается на AWS SDK для обработки логинов. Вот пример моего входа в систему 'AWSIdentityManager.defaultIdentityManager(). LoginWithSign (AWSFacebookSignInProvider.sharedInstance()) {(результат, ошибка) в {}' –