Firebase 限制Firestore对经过身份验证的用户的访问

Firebase 限制Firestore对经过身份验证的用户的访问,firebase,google-cloud-firestore,firebase-security,firebase-console,Firebase,Google Cloud Firestore,Firebase Security,Firebase Console,在Firestore规则中,将访问权限限制为仅经过身份验证的用户的实际正确条件是什么?下面的示例和几个答案说明您应该使用request.auth.uid!=空。我在过去使用过它,它似乎很有效,但最近当我在模拟器中测试一些其他规则时,我注意到当请求未经验证时,它会在该条件下抛出一个空值错误 如果是这种情况,那么似乎request.auth!=null是您应该使用的实际条件,因为它在模拟器中的行为与预期一致 这是模拟器和规则的实际行为之间的差异吗?如果模拟器是正确的,我假设request.auth.

在Firestore规则中,将访问权限限制为仅经过身份验证的用户的实际正确条件是什么?下面的示例和几个答案说明您应该使用
request.auth.uid!=空
。我在过去使用过它,它似乎很有效,但最近当我在模拟器中测试一些其他规则时,我注意到当请求未经验证时,它会在该条件下抛出一个
空值错误

如果是这种情况,那么似乎
request.auth!=null
是您应该使用的实际条件,因为它在模拟器中的行为与预期一致

这是模拟器和规则的实际行为之间的差异吗?如果模拟器是正确的,我假设
request.auth.uid!=null
仅条件“有效”,因为默认行为是在条件中出现错误时拒绝访问。另一个选项是模拟器错误,并且在实际使用数据库时,
request.auth
从不
null


是哪个?

我用几个不同的条件做了一些测试,发现我的假设似乎是正确的--
request.auth.uid!=null
条件正在“工作”,因为当用户未经身份验证时,它会引发错误。在大多数情况下,这可能不会导致任何问题,因为您可能无论如何都想拒绝访问;但是,如果您尝试编写反向条件
request.auth.uid==null
,则会导致问题。由于未经身份验证时会引发错误,因此还会导致规则拒绝访问

我的结论是,这些文档在技术上是不正确的,检查用户是否经过身份验证的条件是
request.auth!=空
。您可以在下面看到我的测试结果,错误行为用粗体显示

测验 文档中描述的访问限制:

  • 已验证-允许访问
  • 未经验证-访问被拒绝
备用访问限制:

  • 已验证-允许访问
  • 未经验证-访问被拒绝
反向限制(文档条件):

  • 已验证-拒绝访问
  • 未经验证-访问被拒绝
反向限制(替代条件):

  • 已验证-拒绝访问
  • 未经验证-允许访问

你为什么说指定的问题在实践中不起作用?@AlexMamo我这么说是因为它似乎表明情况确实如此,而我自己也没有机会对其进行全面测试。但是,我已经测试过了,它似乎确实有效,文档和大多数答案实际上都是错误的。他们已经更新了文档(至少是示例),以更喜欢request.auth!=无效的
allow read, write: if (request.auth.uid != null);
allow read, write: if (request.auth != null);
allow read, write: if (request.auth.uid == null);
allow read, write: if (request.auth == null);