0

AWS を使用して iOS アプリに取り組んでいます。DynamoDB テーブルから項目を取得しようとしていますが、エラーが発生します (時々動作します!!! 4 時間の作業のように、その後ダウンします)

{
 __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
 }

アプリに認証されていないユーザーを入れたくないのですが、DynamoDB クエリを呼び出す前にログインしています。誰でも私を助けることができますか?クエリのコードは次のとおりです:(ログインに生成されたコードを使用しています)

-(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;
    }];

    });


}

私を助けてください!

4

1 に答える 1

1

取得している例外は、Cognito を呼び出して資格情報を取得するときにログイン マップが空であることを意味します。これはアプリの開閉時に発生していますか? それとも、アプリを 4 時間開いたままにしていますか?

ログイン マップには、プロバイダーとプロバイダーからのトークンが常に含まれていることを確認してください。

さらに、iOS SDK の最新バージョンを使用していることを確認してください。

于 2016-06-10T17:08:35.417 に答える