首页 > 解决方案 > 管理客户端 API 密钥的正确 Firestore 架构是什么?

问题描述

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

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

标签: firebasegoogle-cloud-platformgoogle-cloud-firestore

解决方案


有人能把我引向正确的方向吗?我需要一个 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 密钥列表?

当然,正如上面已经解释的那样。


推荐阅读