我通过身份验证为Firebase应用制定了安全规则。
我希望只有用户才能访问他自己的用户文档。
我有此安全规则:
match /users/{uid} {
allow read, update: if request.auth.uid == uid;
allow create: if request.auth.uid != null;
}
但是当我运行客户端代码时,它给出了错误:
[Firestore]:状态{code = PERMISSION_DENIED,描述=缺少或 权限不足。,cause = null}
在客户端代码中,我检查带有用户uid的文档是否已经存在(如果不存在,则将数据写入firestore):
final QuerySnapshot result = await Firestore.instance
.collection('users')
.where('uid', isEqualTo: user.uid)
.getDocuments();
documents = result.documents;
if (documents.isEmpty) {
…
为什么会出现此错误?
我已阅读https://firebase.google.com/docs/firestore/security/rules-query,并说db.collection("stories").where("author", "==", user.uid).get()
有效。
答案 0 :(得分:0)
您在执行此请求时似乎未对用户进行身份验证,确定要先实施authentication engine +已对用户进行身份验证吗?
答案 1 :(得分:0)
您的查询与您的规则不符。该查询将查询文档字段uid
与user.uid
相同的所有文档。但是您的规则是允许对文档ID与用户的UID相同的文档进行读取访问。这些不是一回事。查询正在处理名为uid
的文档字段,而规则正在处理文档ID 。查询和规则必须匹配。由于您没有对文档的结构或具体要实现的内容进行任何说明,因此无法推荐和替代。无论如何,您的查询必须符合规则,否则每次都会失败。