Firebase 数据库安全规则允许经过身份验证的用户读取和写入自己的内容

Posted

技术标签:

【中文标题】Firebase 数据库安全规则允许经过身份验证的用户读取和写入自己的内容【英文标题】:Firebase database security rules allow authenticated user to read and write from their own contents 【发布时间】:2019-01-10 11:21:40 【问题描述】:

这是我的数据库结构:

 Clients:
     employee1emailaddress
     employee2emailaddress
 Employees:
     employee1emailaddress
     employee2emailaddress
 allClients:
     client1phonenumber
     client2phonenumber

我想制定一个安全规则来限制经过身份验证的用户从与他们的电子邮件地址关联的节点读取写入

例如: 电子邮件地址为employee1emailaddress 的员工只能读取和写入以其电子邮件地址为键的节点

如何做到这一点?并提前感谢..

【问题讨论】:

您尝试了什么,为什么没有按预期工作? 我搜索了一种方法来执行此操作,我找到的所有安全规则都取决于 $uid,但正如您所见,我使用电子邮件地址作为密钥,而不是 ID 几天后,我找到了办法。请查看:***.com/questions/57635184/… 【参考方案1】:

我建议不要将数据与用户的电子邮件地址相关联。您应该改用他们的 UID:


  "rules": 
     "$uid": 
        ".read": "auth !== null && auth.uid === $uid",
        ".write": "auth !== null && auth.uid === $uid"
    
  

这将只允许用户从数据库中以他们的 UID 为键的目录读取和写入。

【讨论】:

这适用于所有节点(Clients & Employees & allClients) 对吗?有没有办法将此规则应用于用户的电子邮件? 我确实相信有办法做到这一点,但使用 UID 更好,因为如果用户更改了他们的电子邮件地址,您就不必移动数据。虽然这适用于多个节点,但任何用户都可以在任何节点上编辑他们自己的目录。我建议标记用户并只让他们使用正确的节点,或者不将数据库分成三个节点,而是将所有用户存储在一起。

以上是关于Firebase 数据库安全规则允许经过身份验证的用户读取和写入自己的内容的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 权限被拒绝(读取和写入)与身份验证

匿名身份验证用户的这个 Firebase/Firestore 安全规则是不是安全?

Firebase 以管理员身份进行身份验证

无法为 Android 应用程序的特定经过身份验证的用户 (uid) 编写***集合(列表权限)的 Firestore 安全规则

如何使用经过身份验证的 id 令牌和数据库规则保护 Firebase Cloud Function HTTP 端点?

可以在 Firebase 3 中实现自定义身份验证属性并将其与安全安全规则一起使用吗?