Her*_*tar 3 firebase firebase-security firebase-console google-cloud-firestore
在 Firestore 规则中使用哪些实际正确条件来限制仅对经过身份验证的用户进行访问?官方文档和这里的几个答案说你应该使用request.auth.uid != null. 我过去使用过它,它似乎有效,但最近当我在模拟器中测试其他一些规则时,我注意到当Null value error请求未经身份验证时,它会在该条件下抛出 a 。
如果是这种情况,那么这似乎request.auth != null是您应该使用的实际条件,因为它在模拟器中的表现似乎与预期一致。
这是否是模拟器与规则的实际行为之间的差异?如果模拟器正确,我假设该request.auth.uid != null条件仅“有效”,因为默认行为是在条件出现错误时拒绝访问。另一种选择是模拟器是错误的,并且在实际使用数据库时request.auth永远不会。null
是哪一个?
Her*_*tar 15
我用一些不同的条件做了一些测试,发现我的假设似乎是正确的——该request.auth.uid != null条件“有效”,因为当用户未经身份验证时它会抛出错误。在大多数情况下,这可能不会导致任何问题,因为您可能无论如何都想拒绝访问;但是,如果您尝试编写相反的条件,它确实会导致问题request.auth.uid == null。由于未经身份验证时会引发错误,因此也会导致规则拒绝访问。
我的结论是,这些文档在技术上是不正确的,应该用于检查用户是否经过身份验证的条件是request.auth != null。您可以在下面看到我的测试结果,其中不正确的行为以粗体显示。
文档中描述的访问限制:
allow read, write: if (request.auth.uid != null);
Run Code Online (Sandbox Code Playgroud)
替代访问限制:
allow read, write: if (request.auth != null);
Run Code Online (Sandbox Code Playgroud)
反向限制(文档条件):
allow read, write: if (request.auth.uid == null);
Run Code Online (Sandbox Code Playgroud)
反向限制(替代条件):
allow read, write: if (request.auth == null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5565 次 |
| 最近记录: |