如何在Firebase安全规则中添加额外参数到请求对象以供消费[replicate]

mo49yndu  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(119)

此问题在此处已有答案

Can I send value with request to Firestore rules(2个答案)
Firestore Security Rules: Passing a request parameter in a get() call?(1个答案)
5个月前关闭。
我想让未经身份验证的用户使用secureKey从firebase获取文档。我想实现的是向请求添加额外的变量,并在规则中检查它是否是有效的请求。例如:

const q = query(doc(db, "questions/question_uid"));
const questionDoc = await getDoc(q, {secureKey: "123456"});

在规则侧:

match /questions/{uid} {
  allow get: if request.secureKey === "123456";    
}

我假设用户没有经过身份验证,但是拥有有效的secureKey。(上面的代码不是有效的代码,我写它只是为了解释。)是否可以向请求添加自定义参数并在规则端接收它们?
向getDoc添加参数是无效的,如下所示:

const questionDoc = await getDoc(q, {secureKey: "123456"});
nbysray5

nbysray51#

是否可以向请求添加自定义参数并在规则端接收它们?
向请求添加额外的变量并在安全规则中检查它是不可能的,但是您可以使用Custom Claims实现类似的操作。但是,要使其工作,您需要为每个用户都有一个帐户。
(You可以)定义用户帐户的自定义属性。这提供了在Firebase应用程序中实现各种访问控制策略(包括基于角色的访问控制)的能力。这些自定义属性可以为用户提供不同级别的访问(角色),这些访问在应用程序的安全规则中强制执行。
在安全性规则中,您可以检查用户是否拥有声明,如下例所示:

allow read: if request.auth.uid != null && request.auth.token.secureKey == "123456";

相关问题