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?