【问题标题】:I need to get the user id from my users table in DynamoDB?我需要从 DynamoDB 中的用户表中获取用户 ID?
【发布时间】: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 吗?

【问题讨论】:

    标签: database amazon-web-services graphql amazon-dynamodb


    【解决方案1】:

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

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

    【讨论】:

    • 如何创建或设置用户名作为 GSI?我不需要创建一个全新的表吗?
    • 这个过程非常简单并且有据可查。 AWS 控制台也很有帮助。您只需创建一个 GSI,指明其分区键,并指明要投影的属性。然后将您的查询从本机表更改为 table/gsi(如何执行取决于您使用的 SDK,但通常您指定 TableName 和 IndexName)。
    猜你喜欢
    • 2019-06-13
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2013-11-29
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多