【问题标题】:What's the right firestore architecture for managing client API keys?管理客户端 API 密钥的正确 Firestore 架构是什么?
【发布时间】:2021-10-22 10:50:02
【问题描述】:

有人能把我引向正确的方向吗?我需要一个 Firestore 集合来存储与用户相关的 API 密钥。这意味着有:

  • API 密钥
  • 用户 ID
  • (创建于,未来可能还有其他元字段)

所以有时我想检索属于某个用户的所有 API 密钥的列表。 但通常情况下,我的 API 收到一个附加了 API 密钥的请求,然后我需要快速验证该 API 密钥是否存在。 这是我第一次玩 Firestore。我只是不知道如何构建这个系列。 API 密钥应该是 ID 吗?我是否能够有效地获取具有特定 UID 的 API 密钥列表?

【问题讨论】:

    标签: firebase google-cloud-platform google-cloud-firestore


    【解决方案1】:

    有人能把我引向正确的方向吗?我需要一个 Firestore 集合来存储与用户相关的 API 密钥。

    我能想到的最简单的 Firestore 结构可能如下所示:

    Firestore-root
      |
      --- users (collection)
           |
           --- $uid (document)
                |
                --- apiKeys: ["apiKeyOne", "apiKeyTwo", "apiKeyThree"] //Array
                |
                --- uid: "userId" //String
                |
                --- createdAt: October 21, 2021 at 2:46:19 PM UTC+3 //Timestamp
    

    所以有时我想检索属于某个用户的所有 API 密钥的列表。

    假设您使用的是Firebase Authentication,只需使用以下代码行:

    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        var uidRef = db.collection("users").doc(user.uid);
        //Process the data
      }
    });
    

    但通常情况下,我的 API 收到一个附加了 API 密钥的请求,然后我需要快速验证此 API 密钥是否存在。

    要解决这个问题,您必须使用以下方法检查特定 API 密钥是否已存在:

    var queryByApiKey = db.collection("users").where("apiKeys", "array-contains", "apiKeyToCheck");
    

    API 密钥应该是 ID 吗?

    不,没有必要。

    我能否有效地获取具有特定 UID 的 API 密钥列表?

    当然,如上所述。

    【讨论】: