firebase - 管理客户端 API 密钥的正确 Firestore 架构是什么?
问题描述
有人能把我引向正确的方向吗?我需要一个 Firestore 集合来存储与用户相关的 API 密钥。这意味着有:
- API 密钥
- 用户身份
- (创建于,未来可能还有其他元字段)
所以有时我想检索属于用户的所有 API 密钥的列表。但通常情况下,我的 API 收到一个附加了 API 密钥的请求,然后我需要快速验证该 API 密钥是否存在。这是我第一次玩 Firestore。而且我只是对如何构建集合感到不安全。API 密钥应该是 ID 吗?我是否能够有效地获取具有特定 UID 的 API 密钥列表?
解决方案
有人能把我引向正确的方向吗?我需要一个 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 密钥列表?
当然,正如上面已经解释的那样。
推荐阅读
- css - 为什么 Flexbox 在嵌套时不尊重宽度?
- django - 来自 github 的 Heroku Django 设置 install_requires
- docker - 具有进程隔离的 Windows 容器内的物理内存限制
- c - scanf 中 *variable 的用法以及我们为什么使用它?
- javascript - 如何获取特定 Discord 角色的名称?
- sql - 寻找出现更严重疾病的患者
- android - 暂停正在运行的协程
- spring - JavaConfig 中定义的 bean 的 NoSuchBeanDefinitionException
- r - 可变文本包含多个模式
- bluetooth - Bluez 不读取广告包