如何使用Firebase安全规则创建公共/私人用户个人资料?

use*_*ond 5 json firebase firebase-security

{
  "rules": {
       "users": {
            "$uid":{ 
                 //Private whatever under "uid" but Public is exposed
                 ".read": "auth != null && auth.uid == $uid",
                 ".write": "auth != null && auth.uid == $uid",

                 "public": { ".read": "auth != null" }
                 }
               }
            }
}
Run Code Online (Sandbox Code Playgroud)
  • 我已创建这些规则以使用户具有公共/私人配置文件
  • 任何经过身份验证的用户都可以访问" users/{uid}/public "配置文件,但无法访问" users/uid " 下的数据

以下是存储在我的firebase数据库中的一些虚假数据.

{
  "users" : {
    "YFIIAgwa2kaannrXjwvSZmoywma2" : {
      "Name:" : "Example 1",
      //This public child should be accessible by 
      //"Example 2" but cannot know the name of 
      // this user
      "public" : {
        "email" : "example1@gmail.com"
      }
    },
    "YgSfSzPzxLbyDL17r6P9id2cdvH2" : {
      "Name:" : "Example 2",
      //This public child should be accessible by 
      //"Example 1" but cannot know the name of 
      // this user
      "public" : {
        "email" : "example2@gmail.com"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想知道这是否是阻止任何用户访问用户关键信息的有效方法!无论如何我可以通过使用验证来改善这一点吗?我对你们有任何建议持开放态度.我想为我的应用程序创建最好和最简单的安全规则.

Fra*_*len 8

您当然可以使用当前数据结构保护对私有和公共数据的访问.

但是,您可能希望在某个时刻使用的一个用例是显示所有用户的公共信息列表.使用您当前的数据结构是不可能的,因为Firebase的安全模型不能用于过滤数据.有关此问题的绝佳答案,请参阅使用安全规则限制子/字段访问.

大多数开发人员将公共和私有数据拆分为完全独立的子树:

{
  "users" : {
    "YFIIAgwa2kaannrXjwvSZmoywma2" : {
      "Name:" : "Example 1",
    },
    "YgSfSzPzxLbyDL17r6P9id2cdvH2" : {
      "Name:" : "Example 2",
    }
  },
  "public_profiles": {
    "YFIIAgwa2kaannrXjwvSZmoywma2" : {
      "email" : "example1@gmail.com"
    },
    "YgSfSzPzxLbyDL17r6P9id2cdvH2" : {
      "email" : "example2@gmail.com"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命

{
  "rules": {
     "users": {
        "$uid":{ 
             ".read": "auth != null && auth.uid == $uid",
             ".write": "auth != null && auth.uid == $uid",
        }
     },
     "public_profiles": {
        ".read": "auth != null",
        "$uid":{ 
             ".write": "auth != null && auth.uid == $uid",
        }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在任何经过​​身份验证的用户都可以收听/public_profiles,这意味着您可以轻松显示这些配置文件的列表.