ios - 使用 Cognito userId 将数据存储到 DynamoDB

标签 ios amazon-web-services amazon-dynamodb aws-sdk amazon-cognito

我使用 AWS Mobile Hub 设置了我的 iOS 应用程序。我使用的服务是 AWS Cognito 和 AWS DynamoDB。

我在 AWS DynamoDB 上创建了一个私有(private)表,默认情况下该表具有分区键 userId。据我所知,AWS DynamoDB 仅允许 userIdidentityId,例如AWSIdentityManager

我能够通过 AWSCognitoIdentityUserPool.default().currentUser()?.getSession() 成功建立用户 session 。

我使用通过 AWSIdentityManager.default().identityId 获取的 identityId 作为 userId 读取/写入 AWS DynamoDB。

但是,即使我已经建立了用户 session ,identityId 在设备上始终保持不变。

如何从 AWSIdentityManager 获取特定于 AWS Cognito 用户的 identityId

最佳答案

编辑:

正如我们在评论线程中一起发现的那样,每个认知用户的 IdentityId 都是唯一的,但它们缓存在设备上,需要在注销时清除。通过 swift sdk 清除:

AWSCognitoIdentityProvider.Clear()

下面是我的原始答案,建议使用用户名或别名,每个认知用户也是唯一的,但它只能用作评论讨论的引用。请使用 IdentityId 作为 dyanmodb 主键。

编辑结束:

我建议使用用户名作为 dynamodb 表中的分区键。

您可以通过以下方式从 AWSCognitoIdentityUser 对象获取用户名

if let username = AWSCognitoIdentityUserPool.default().currentUser()?.username {
   // do stuff with username
}

您还可以将用户池配置为使用自定义用户名别名,以允许用户通过电子邮件和/或电话号码登录。在这种情况下,电子邮件和/或电话号码也将是唯一的,如果您愿意,您可以使用其中任何一个作为 dynamodb 表中的唯一分区键。这是 overview of aliases在认知中。

关于ios - 使用 Cognito userId 将数据存储到 DynamoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50495962/

相关文章:

ios - 包含来自本地 JSON 文件的部分的 UITableView

ios - Facebook 个人资料图片大

cocoa-touch - 使用 loadNibNamed 时未初始化子类 UITableViewCell

amazon-web-services - Aws Lambda 显示进度

amazon-web-services - 等于 aws cloudFormation YAML 中的条件给出错误

php - 如何加快通过 Amazon SES 发送邮件的速度?

amazon-web-services - 将 DynamoDB 表导出到 S3 存储桶 : No subnet found in default VPC. 至少需要一个子网

objective-c - iOS 应用程序 NSInvalidArgumentException

java - DynamoDB JDK 2.X 中 ItemUtils.toAttributeValue 的等效项?

node.js - NodeJS 中用于 API 的 stub DynamoDB