ios - 如何将认知用户池与身份池集成?

标签 ios amazon-web-services amazon-cognito

我正在练习 CognitoUserPoolsSample iOS Obj-C 应用程序,并尝试添加与 Cognito Identity 的集成。我已经设置了一个用户池和一个身份池,其中用户池设置为身份池的身份验证提供程序。用户池工作正常,但用户未显示在身份池中。 这是我在 applicationDidFinishLaunchingWithOptions 中的内容:

//setup service config
AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil];

//Configure user pool
AWSCognitoIdentityUserPoolConfiguration *userPoolConfiguration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"CLIENT_ID"  clientSecret:@"CLIENT_SECRET" poolId:@"POOL_ID"];
[AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:userPoolConfiguration forKey:@"UserPool"];
AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];

//configure identity pool
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
                                                      initWithRegionType:AWSRegionUSEast1
                                                      identityPoolId:@"IDENTITY_POOL_ID"
                                                      identityProviderManager:pool];
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];
[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;

到目前为止这是否正确?下一步是什么?当我注册新用户时,为什么它没有显示在身份池中?身份池控制台显示已创建零个身份。

最佳答案

嗨,这里要理解的关键是当您调用时:

AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
                                                      initWithRegionType:AWSRegionUSEast1
                                                      identityPoolId:@"IDENTITY_POOL_ID"
                                                      identityProviderManager:pool];

AWS 框架将为您做好一切准备,认知用户池以及与联合身份的集成将无缝运行。

我最初忽略的一个关键注释在这里:http://docs.aws.amazon.com/cognito/latest/developerguide/getting-credentials.html

[[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;
   }
return nil;
}];

这会强制从服务器刷新您的凭据。用户和 session 中包含的对象可用于确认登录和关联的 cognito id 以及 session token 。

注意不要将 MobileHubHelper 与上述代码一起使用。因为移动 HUB Helper 将摧毁这一切。

关于ios - 如何将认知用户池与身份池集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38688345/

相关文章:

ios - AWS Cognito 和 DynamoDB 中的 Swift 未解析标识符

ios - 将 UITextfield 问题转换为 NSMutableArray

ios - 为什么我在 Swift5 中收不到推送消息?

amazon-web-services - AWS s3 控制台显示意外错误并且存储桶不可见

scala - 始终从 Spark 中的 s3 存储桶读取最新文件夹

php - IAM 角色名称在 Yii 1 中被视为类

ios - 等待 NSData dataWithContentsOfURL : to finish loading, 然后

ios - 根据文本内容的高度设置单元格的高度

c# - Cognito ListUsers 永远持续下去

amazon-web-services - 在Lambda函数中获取Cognito用户池身份