限制对身份验证的用户访问的FireStore

问题描述 投票:-1回答:1

什么是在公司的FireStore规则使用限制访问只有认证用户的实际情况正确?这里的official docs和几个答案说,你应该使用request.auth.uid != null。我已经在过去使用这一点,它似乎工作,但最近当我在模拟器上测试一些其他的规则,我注意到它抛出对条件Null value error当请求未经身份验证。

如果是这样的话,似乎request.auth != null是你应该使用的实际情况,因为它似乎表现为打算在模拟器。

这是模拟器和规则的实际行为之间的差异?如果模拟器是正确的,我承担request.auth.uid != null条件唯一的“作品”,因为默认行为是拒绝访问,如果有一个条件的错误。另一种选择是,该模拟器是错误的,实际使用数据库时request.auth从未null

这是什么呢?

firebase google-cloud-firestore firebase-security-rules firebase-console
1个回答
0
投票

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

我的结论是,该文档在技术上不正确的,应该用来检查是否验证过的用户是request.auth != null的条件。你可以看到下面我测试的结果,以粗体显示不正确的行为。

测试

由文档描述的访问限制:

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);
  • 经过身份验证 - 访问被拒绝
  • 未经验证 - 允许访问
© www.soinside.com 2019 - 2024. All rights reserved.