Firebase Cloud Firestore 数据库规则数据访问被拒绝

Posted

技术标签:

【中文标题】Firebase Cloud Firestore 数据库规则数据访问被拒绝【英文标题】:Firebase Cloud Firestore Database Rules data access denied 【发布时间】:2018-10-18 21:39:01 【问题描述】:

我有一个应用程序与 Cloud Firestore 通信,以根据其 uid 获取用户数据,并且在当前设置下工作正常:

service cloud.firestore 
  match /databases/database/documents 
    match /document=** 
      allow read, write;
    
  

但显然这是不可接受的,因为它是公开的,并带有来自 firestore 的警告:

您的安全规则被定义为公开的,因此任何人都可以窃取、修改或删除您数据库中的数据

在下图中是我当前的数据库设置,该集合包括为用户隐私隐藏的唯一用户 uid...我想用我的 Firestore 规则完成的是允许 uid仅访问具有读写访问权限的自己的集合 uid

我尝试了以下规则,但无法访问数据:

service cloud.firestore 
  match /database 
    match /userId 
      allow read, write;
    
  

感谢任何帮助指出我编写规则的正确方法!我阅读了 Firestore 指南,但它根本没有帮助!

非常感谢!

【问题讨论】:

仅供参考:UID 不是私人问题。 IE。尽管知道您在此处的 ID 为 3022454,但我无法在 Stack Overflow 上对您的帐户进行任何恶意操作。请参阅 ***.com/questions/37221760/… 【参考方案1】:

如果您希望用户读取/写入其集合中的文档,请尝试以下操作:

service cloud.firestore 
  match /databases/database/documents 
    // Make sure the uid of the requesting user matches name of the user
    // collection. The wildcard expression userId makes the userId variable
    // available in rules.
    match /userId/userDocs 
      allow read, write: if request.auth.uid == userId;
    
  

如果您有嵌套数据,并希望用户访问他们所有的嵌套数据,请尝试:

service cloud.firestore 
  match /databases/database/documents 
    // Make sure the uid of the requesting user matches name of the user
    // collection. The wildcard expression userId makes the userId variable
    // available in rules.
    match /userId/userDocs=** 
      allow read, write: if request.auth.uid == userId;
    
  

文档:

Rules and auth Recursive wildcard syntax

【讨论】:

谢谢!效果很好!我使用了第二个选项,因为我希望用户访问他们所有的嵌套数据。

以上是关于Firebase Cloud Firestore 数据库规则数据访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

尝试初始化 Cloud Firestore 时,firebase.firestore() 不是函数

尝试初始化 Cloud Firestore 时,firebase.firestore() 不是函数

@firebase/firestore:Firestore (8.6.2):无法访问 Cloud Firestore 后端(React Js)

@firebase/firestore:Firestore (5.0.4):无法访问 Cloud Firestore 后端。后端在 10 秒内没有响应

导出 Firestore 备份数据的云功能。使用 firebase-admin 或 @google-cloud/firestore?

React Native Firebase Cloud Firestore