Firebase Firestore安全规则:未定义的对象属性是否重要?

Firebase Firestore安全规则:未定义的对象属性是否重要?,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我想知道对于firestore安全规则中未定义的属性,公约是什么 例如,在检查自定义索赔的以下规则中: 允许读取:if request.auth.token.claims.admin 未定义属性错误有很多方面,到目前为止,最有可能的是如果用户未经身份验证,那么request.auth将是未定义的,因此request.auth.token.claims.admin将尝试访问未定义值的属性 我注意到,在文档中,request.auth.uid是一个常见的检查,它们不检查request.auth是否首

我想知道对于firestore安全规则中未定义的属性,公约是什么

例如,在检查自定义索赔的以下规则中:

允许读取:if request.auth.token.claims.admin

未定义属性错误有很多方面,到目前为止,最有可能的是如果用户未经身份验证,那么request.auth将是未定义的,因此request.auth.token.claims.admin将尝试访问未定义值的属性

我注意到,在文档中,request.auth.uid是一个常见的检查,它们不检查request.auth是否首先定义。然而,在我的研究中,我注意到有些人确实会对类似的查询进行检查,例如

下面是模拟器返回内容的注释屏幕截图。我的理解是,对未定义属性的检查对于安全性不是必需的。我的问题是标准是什么,如果不检查未定义的属性是标准,那么为什么模拟器会抛出错误

请注意,以下哪种隐式或显式布尔条件是首选的,以及原因:

允许读取:if request.auth.token.claims.admin


允许读取:if request.auth.token.claims.admin==true

首先:规则评估中的所有错误都会导致错误。没有任何条件的错误会导致访问被拒绝。因此,如果您试图访问null或未定义对象的属性,这是一个错误,因为该属性不存在,并且会立即拒绝访问


如果您想显式地检查规则中的null,那没关系。这可能有助于提高这些规则的可读性。但你没有义务这么做,因为访问被立即拒绝。这完全取决于您。

谢谢您的回复。那么旁注呢……是否最好包含布尔值的“==true”RHS?几乎任何语言中的布尔值都不需要==比较。不过,只要你能读得懂就行了。谢谢,只是确定一下。规则是我不想搞砸的一件事: