【发布时间】:2021-11-23 11:32:06
【问题描述】:
我们有一个令牌集合 /funTokens,其中每个文档 ID 都是一个令牌 ID,文档数据包含一个 name 字段(令牌 ID 也是一个字段)。
我们希望从 Web (javascript) 查询集合,并且仅当请求包含并匹配 name 和 token 字段时才允许访问文档。
注意-有很多令牌,令牌不是用户
示例- 某人应该能够打开 funExample.com/getTokenData?token=123&name=bob url,在 javascript Firestore 查询中,我们将传递这些参数并在安全规则中验证它们。
因此查询将只允许访问此文档:
/funTokens/123: {
token: 123,
name: bob,
stuf: <>
}
有可能吗?
【问题讨论】:
-
您是要求满足此需求的安全规则还是要求正确的查询?
-
谢谢!我正在使用以下查询:
db.doc(funTokens/${token}).get().then(...)但我不确定如何将名称插入查询,以及假设是什么安全规则 -
让我们从查询开始,假设 token_id 是一个持有令牌 id 的变量,请尝试以下
db.collection('funTokens').doc(token_id).get().subscribe(token => token=token)并告诉我它是否成功。现在,请使用公共安全规则,以便任何人都可以查询 -
是的,这是有效的
-
在 firebase 中,您正在查询特定的文档,所以我认为您不能在
get中插入调用token_id和name。您需要用来确认查询是否包含 token_id 的规则是:match /funTokens/{token_id}{ allow read: if request.path[4] == token_id; }如果您想更改数据库,还有其他选项可以得到您想要的
标签: google-cloud-firestore firebase-security