当前位置: 首页 > 面试题库 >

如何使用Firebase安全规则创建公共/私人用户配置文件?

上官鸿晖
2023-03-14
问题内容

{
“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" }
                 }
               }
            }
}
  • 我创建这些规则是为了让用户拥有公共/私人资料
  • 任何经过身份验证的用户都应该可以访问“ 用户 / {uid} / 公共 ”配置文件,但不能访问“ 用户/ 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"
      }
    }
  }
}

我想知道这是否是防止任何用户访问用户关键信息的可靠方法!无论如何,我可以通过使用validate来改善它吗?我愿意接受你们的任何建议。我想为我的应用程序创建最佳和简单的安全规则。


问题答案:

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

但是您可能需要在某个时候使用的一个用例是显示所有用户的公共信息列表。使用当前的数据结构是不可能的,因为Firebase的安全模型无法用于过滤数据。

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

{
  "users" : {
    "YFIIAgwa2kaannrXjwvSZmoywma2" : {
      "Name:" : "Example 1",
    },
    "YgSfSzPzxLbyDL17r6P9id2cdvH2" : {
      "Name:" : "Example 2",
    }
  },
  "public_profiles": {
    "YFIIAgwa2kaannrXjwvSZmoywma2" : {
      "email" : "example1@gmail.com"
    },
    "YgSfSzPzxLbyDL17r6P9id2cdvH2" : {
      "email" : "example2@gmail.com"
    }
  }
}

然后,您可以使用以下方法保护访问权限:

{
  "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",
        }
     }
  }
}

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



 类似资料:
  • 我读过消防安全规则文件。我已经通过Firebase(Firebase Auth)实现了身份验证,但我无法理解如何根据每个用户的配置文件在Firebase中正确配置安全规则。 考虑以下数据结构 用户只能在其所属的公司中读取或写入信息(users/$iduser/companis/$idcompany==true) 规则2 只有公司X的管理用户可以让另一个用户访问他的公司,对于该公司,idcompan

  • 考虑一个允许用户在Firebase存储中存储照片的应用程序,这些照片在cutom元数据“所有者”字段中设置了用户的ID。 以下firebase存储安全规则确保只有他们可以看到自己的照片: 现在想象一下,如果用户愿意,该应用程序允许用户公开他们的照片,任何人都可以看到,即使是未登录的用户(request.auth==null)。这可以通过另一个自定义元数据字段和一个略有不同的规则来完成: Fireb

  • 我花了最后一天的时间试图做一些关于消防规则的事情,但我似乎找不到任何地方的解决方案。我对这个火炉规则很陌生,所以请耐心:) 我目前有以下规则:

  • 我最近收到一封来自Firebase的电子邮件,告诉我我的数据库(FiRest)的规则不安全,所以我将它们更改为以下内容: 在我有这些规则之前: 在做出改变后,电子邮件不断地回来,我不知道还能做什么。我已经尝试了以下链接中给出的几个选项,但它们都不能满足我的需要。 https://firebase.google.com/docs/rules/insecure-rules#firestore 我需要授

  • 简单介绍一下,我正在尝试了解Firebase安全协议,我已经建立了一个名为UsersDB的数据库,该数据库将根据身份验证存储详细信息。uid。详细信息包括全名、电子邮件、提供商、帐户创建日期、上次登录日期。 我设置了如下规则: 我的理解是,记录只能由user_id符合auth.uid.的人读写 我的问题是我做得对吗?如果不对,我应该如何实现这一目标?我只希望创建帐户的人能够读写这个,而没有其他ui

  • 我试图为我的云还原设置安全规则,但我对规则应该应用于哪个数据库感到困惑。 我目前使用的唯一功能是记录Firebase事件。安全规则是否适用于Firebase事件?如果是,应该为哪个数据库编写规则?如果没有,我是否可以拒绝对所有事件的读/写访问,并且事件仍将被记录并发送到BigQuery?