如何从客户端查询Firestore?

时间:2019-09-23 15:12:53

标签: firebase google-cloud-firestore firebase-authentication firebase-security

我通过身份验证为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()有效。

2 个答案:

答案 0 :(得分:0)

您在执行此请求时似乎未对用户进行身份验证,确定要先实施authentication engine +已对用户进行身份验证吗?

答案 1 :(得分:0)

您的查询与您的规则不符。该查询将查询文档字段uiduser.uid相同的所有文档。但是您的规则是允许对文档ID与用户的UID相同的文档进行读取访问。这些不是一回事。查询正在处理名为uid文档字段,而规则正在处理文档ID 。查询和规则必须匹配。由于您没有对文档的结构或具体要实现的内容进行任何说明,因此无法推荐和替代。无论如何,您的查询必须符合规则,否则每次都会失败。