当前位置: 首页 > 知识库问答 >
问题:

使用规则和认证将云firestore数据库私有化

赵钊
2023-03-14
service cloud.firestore {
  match /databases/{database}/documents {

    match /users/{userId=**} {
        allow read: if userId == request.auth.uid;
    }

  }
}

我使用的是javascript,检索“组”的代码如下:

console.log("uid: ", uid)
db.collection("users/" + uid + "/groups")
  .onSnapshot(function(querySnapshot) {
    querySnapshot.forEach(function(doc) {
      console.log(doc.data())
    })
})

现在,由于cloud firestore没有像realtime database这样的调试工具,所以我自己做了一些调试。

我有一个uid为“5LS2NA21UGBABEW4AKYWYEF9FH42”的测试用户,所以我像这样更改了规则:

service cloud.firestore {
  match /databases/{database}/documents {

    match /users/{userId=**} {
        allow read: if "5lS2NA21UgbabEw4AkyWyef9FH42" == request.auth.uid;
    }

  }
}
service cloud.firestore {
  match /databases/{database}/documents {

    match /users/{userId=**} {
        allow read: if "5lS2NA21UgbabEw4AkyWyef9FH42" == userId;
    }

  }
}

现在我无法从数据库中获得任何数据。

有人能告诉我我做错了什么吗?

共有1个答案

范朗
2023-03-14

我想我已经想通了。问题是{userid=**}

如果您有以下规则

service cloud.firestore {
  match /databases/{database}/documents {

    match /users/{userId=**} {
        allow read: if userId == request.auth.uid;
    }

  }
}

并且试图访问用户/5LS2NA21Ugbabew4AkyWYEF9FH42/groups,则“userid”变量的计算结果不是5LS2NA21Ugbabew4AkyWYEF9FH42(我不知道它是什么,但我猜是“5LS2NA21Ugbabew4AkyWYEF9FH42/groups”)。因此,如果您想将文档私有化,您必须在规则中指定每一个文档,如下所示。

service cloud.firestore {
  match /databases/{database}/documents {

    match /users/{userId} {
        match /groups/{groupId} {
           allow read: if userId == request.auth.uid;
        }
        match /events/{eventId} {
           allow read: if userId == request.auth.uid;
        }
    }

  }
}
 类似资料:
  • 最近我收到了一系列Firebase通知,涉及: [Firebase]您的Cloud FiRecovery数据库有不安全的规则 我们检测到您的安全规则存在以下问题:任何用户都可以写入您的整个数据库。因为您的项目没有强大的安全规则,任何人都可以访问您的整个数据库。攻击者可以窃取、修改或删除您的数据,并会抬高您的账单` Edit2:我需要的是允许每个人都写,而不需要登录,但是只有管理员帐户应该能够从Fi

  • 我使用这个firebase规则: 那么我需要更改firebase规则或更改编码吗?

  • 我使用下面的firebase rest API访问firestore数据库数据 为了访问我的firestore数据库,我在关键部分使用了我的访问令牌,但我收到了来自firebase的电子邮件,称“[firebase]您的云firestore数据库有不安全的规则”。直到那时,我才发现任何人都可以访问我的数据库数据,即使没有有效的访问令牌 谢谢

  • 目标:用户应可以访问已登录用户的文档。 集合结构: 我使用的Android代码 我尝试过的数据库规则: 我收到的错误: com.google.firebase.firestore。FirebaseFirestoreException:PERMISSION_DENIED:缺少权限或权限不足。 侦听查询(目标 = 查询(按名称的根顺序);limitType=LIMIT_TO_FIRST) 失败:状态{

  • 我正在开发一款iOS应用程序,它有(哇,惊喜!)聊天功能。整个应用程序大量使用Firebase工具,对于数据库,我正在使用新的云Firestore解决方案。 目前我正在使用数据库规则加强安全性,但我对自己的数据模型有点挣扎:)这可能意味着我的数据模型选择不当,但我真的很满意,除了实现规则部分。 模型的对话部分如下所示。在我的数据库的根目录下,我有一个集合: 然后我对每个对话都有一个子集合,称为消息