我需要从 DynamoDB 中的用户表中获取用户 ID?

Posted

技术标签:

【中文标题】我需要从 DynamoDB 中的用户表中获取用户 ID?【英文标题】:I need to get the user id from my users table in DynamoDB? 【发布时间】:2020-07-01 20:22:32 【问题描述】:

我在我的 react 本机应用程序上使用 AWS Amplify

我想做一些看似如此简单的事情,但我对如何做有点迷茫:我有一个表格,里面已经有用户信息。这是架构:

type Users @model 
  id: ID!
  userName: String
  firstname: String
  weblink: String
  email: String
  mobileNum: String
 .
 .
 .



//Here's my Query.js
export const getUsers = `query GetUsers($id: ID!) 
  getUsers(id: $id) 
    id
    userName
    firstname
    weblink
    email
    .
    .
    .
  

`;

当我检查我的 AWS 控制台时,此表会填充到 DynamoDB 中。我需要的是能够使用用户名从表中获取 id(反之亦然)。 id 是在我 createUser() 时生成的,它在我的整个应用程序中用于获取我的所有用户信息。但是,当用户在新手机上登录时,此 ID 不再可用。因此,当他们通过 Cognito 登录时,我确实知道用户名,我需要做的就是检索此 ID。

通常我会这样做,但显然我想做相反的事情并使用我唯一的用户名来获取 id:

const userData = await API.graphql(graphqlOperation(GetUsers,  id: usersId ));   //usersId = "3b0dae-24j5-4401-95a6-11seyhaf1g131"

知道如何获取我的用户 ID 吗?

【问题讨论】:

【参考方案1】:

假设userName 是唯一的,创建一个Global Secondary Index 并以userName 作为分区键。 Project,至少,id 属性进入索引。最后,搜索该索引而不是基础表。

或者,如果您从不需要通过id 进行查找,请考虑将userName 设置为分区键并将id 设置为常规属性。

【讨论】:

如何创建或设置用户名作为 GSI?我不需要创建一个全新的表吗? 这个过程非常简单并且有据可查。 AWS 控制台也很有帮助。您只需创建一个 GSI,指明其分区键,并指明要投影的属性。然后将您的查询从本机表更改为 table/gsi(如何执行取决于您使用的 SDK,但通常您指定 TableName 和 IndexName)。

以上是关于我需要从 DynamoDB 中的用户表中获取用户 ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中获取cognito中的其他用户数据

获取 DynamoDB / AWS 生态系统中的热门帖子

如何将 DynamoDB 细粒度访问控制与 Cognito 用户池结合使用?

从 DynamoDB 中删除大量项目的推荐方法是啥?

从 DynamoDB 更改中反应应用程序更新数据

如何从 Java 中的 DynamoDB getItem 中获取特定属性值