0

Я работаю для приложения iOS с использованием AWS. Я пытаюсь получить элементы из моей DynamoDB таблицы, но я получаю сообщение об ошибке (время от времени это работает !!! Как 4 часа работает, то идет вниз)iOS - Войдите в систему с Facebook, но все еще получая: «Недопустимый доступ не поддерживается для этого пула идентификаторов»

{ 
__type=com.amazon.coral.service#AccessDeniedException, 
Message=User:arn:aws:sts::306752704279: 

assumed-role/Cognito_equo_MOBILEHUB_1429140868Unauth_Role/CognitoIdentityCredentials 
is not authorized to perform: dynamodb:Query on resource: 
arn:aws:dynamodb:us-east-1:306752704279:table/equo-mobilehub-1429140868-TripActive/index/searchByOwner 
} 

Я не хочу, чтобы мое приложение, чтобы иметь Неавторизованные пользователи, но я вхожу в LOGIN IN, прежде чем вызывать запрос DynamoDB. Может кто-нибудь мне помочь? Вот мой код для запроса: (я использую де сгенерированный код для LogIn)

-(void) getUserHorsesWithMax: (int)pMax page:(int) pPage { 

    dispatch_async(dispatch_get_main_queue(), ^{ 

    loading = true; 

    AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 
                            identityPoolId:@"us-east-1:a1372699-48b0-499a-bf17-84811860a8bb"]; 

    [[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) { 
     if (task.error) { 
      NSLog(@"Error: %@", task.error); 
     } 
     else { 
      // the task result will contain the identity id 
      NSString *cognitoId = task.result; 

      AWSDynamoDBObjectMapper *dynamoDBObjectMapper = [AWSDynamoDBObjectMapper defaultDynamoDBObjectMapper]; 

      AWSDynamoDBQueryExpression *queryExpression = [AWSDynamoDBQueryExpression new]; 

      queryExpression.indexName = @"searchByOwner"; 

      queryExpression.expressionAttributeValues = @{@":owID":cognitoId}; 
      queryExpression.keyConditionExpression = @"ownerId=:owID"; 


      [[dynamoDBObjectMapper query:[TripActive class] 
           expression:queryExpression] 
      continueWithBlock:^id(AWSTask *task) { 

       loading = false; 

       if (task.error) { 
        NSLog(@"The request failed. Error: [%@]", task.error); 
       } 
       if (task.exception) { 
        NSLog(@"The request failed. Exception: [%@]", task.exception); 
       } 
       if (task.result) { 

        dispatch_async(dispatch_get_main_queue(), ^{ 

         AWSDynamoDBPaginatedOutput *paginatedOutput = task.result; 
         horses = [NSMutableArray new]; 
         for (Horse *horse in paginatedOutput.items) { 
          //Do something with horse. 

          if (self.segmentedTrips.selectedSegmentIndex == FUTURE_TRIPS) { 



          } else if (self.segmentedTrips.selectedSegmentIndex == ACTIVE_TRIPS) { 

           [horses addObject:horse]; 

          } else if (self.segmentedTrips.selectedSegmentIndex == PAST_TRIPS) { 


          } 


         } 


         [UIView animateWithDuration:0.2 animations:^(void) { 

          self.tripsTableView.alpha = 1.0f; 


         } completion:^(BOOL finished) { 

          self.tripsTableView.hidden = false; 

         }]; 


         [self.tripsTableView reloadData]; 

        }); 



       } 

       return nil; 
      }]; 


     } 
     return nil; 
    }]; 

    }); 


} 

ПОЖАЛУЙСТА ПОМОГИТЕ МНЕ!

+0

У вас есть данные в tsk.result ..... или нет. –

+0

Задача. Результат, содержащий идентификатор Cognito, на самом деле получает Real Cognito ID @AbhishekMishra –

ответ

1

Исключением, которое вы получаете, означает, что карта входа пуста при вызове Cognito для получения учетных данных. Это происходит во время открытия/закрытия приложения? Или вы поддерживаете приложение в течение 4 часов?

Убедитесь, что карта входа всегда содержит поставщика и токен у поставщика услуг.

Кроме того, убедитесь, что используете самую последнюю версию SDK iOS.