【问题标题】:Allow User Read, Write Own Document Firestore允许用户读取、写入自己的文档 Firestore
【发布时间】:2020-10-23 06:02:04
【问题描述】:

我正在尝试设置 Firestore 安全性,以便用户可以读写自己的文档 这是我用来向数据库添加数据的代码

data() {
  return {
    order: {
      price: null,
      amount: null,
      comment: null,
      createdAt: new Date().toString().slice(0, 25),
      uid: fb.auth().currentUser.uid
    }
  }
}

sendBuy() {
  db.collection("orders").add(this.order);
}

这是读取数据的代码

readData() {
  let uid = fb.auth().currentUser.uid;
  db.collection("orders")
    .where("uid", "==", uid)
    .get()
    .then(querySnapShot => {
      querySnapShot.forEach(doc => {
        console.log(doc.id, "=>", doc.data());
      });
    });
}

我试过的firestore规则不起作用

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /orders/{uid} {
      allow read, write: if request.resource.data.uid == request.auth.uid;
    }
  }
}

请问我如何才能做到这一点

【问题讨论】:

  • 您分享的代码/规则有什么问题?
  • 该规则没有按我的预期工作,经过身份验证的用户无法读写,唯一有效的规则是 if request.auth != null;

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


【解决方案1】:

这些规则应该有效:

allow read: if resource.data.uid == request.auth.uid;
allow write: if request.resource.data.uid == request.auth.uid;

要修复写入中的安全漏洞,您可以执行以下操作(保持读取相同):

allow create: if request.resource.data.uid == request.auth.uid
allow update, delete: if resource.data.uid == request.auth.uid && request.resource.data.uid == resource.data.uid

这允许任何登录的人创建属于他们的订单。它只允许用户更新与他们的 uid 匹配的订单,并且不允许他们更改 uid。

【讨论】:

  • 我很高兴它成功了!然而,写规则中有一个安全漏洞。使用当前的写入规则,任何用户都可以将任何文档的 uid 更改为自己的。从技术上讲,任何登录的人都可以劫持订单并将其变成自己的。我将在我的答案中添加一个编辑,向您展示如何解决这个问题。
【解决方案2】:

对于读取操作/查询,您需要检查 resource.data.uid 而不是 request.resource.data.uid。所以:

allow read: if resource.data.uid == request.auth.uid;

这可能也适用于写入,但我还没有测试过。

【讨论】:

  • 我试过了,我仍然在控制台中缺少权限或权限不足
  • 这个答案绝对适合阅读。您发布的(删除阅读)allow write: if request.resource.data.uid == request.auth.uid; 将用于写入,因为授权不存在的文档的唯一方法是检查请求的内容。
猜你喜欢
  • 2020-02-07
  • 1970-01-01
  • 2020-07-28
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2019-09-10
相关资源
最近更新 更多