Logo
Section 1 / 3

实时数据库安全规则

快速了解 Firebase 安全规则,并学习实时数据库安全规则。

导入

实时数据库安全规则

快速了解 Firebase 安全规则,并学习实时数据库安全规则。

此时课程中,我们可以对已初始化的一些 Firebase 服务执行读写操作,例如 Realtime Database、Cloud Firestore 和 Cloud Storage。这是因为这些服务当前的安全规则设置为允许开放访问。虽然在开发阶段这可能不是问题,但在部署的应用程序中使用此类规则则非常危险,因为任何猜到或获取了我们项目 ID 的人,都可轻易窃取、修改或删除我们的数据。

Firebase 安全规则 用于保护和控制对这些 Firebase 产品中数据的访问,确保 Firebase 项目中的用户只能读取和写入其被授权的数据。这些规则位于客户端应用与数据之间,因此可作为抵御恶意用户的防护机制,并确保客户端 SDK 执行的所有读写操作均符合最终用户的权限。

工作原理

Firebase 安全规则提供了一种表达式语言,使我们能够选择终端用户如何访问 Firebase 产品中的数据。它们通过将模式匹配到数据库或存储桶路径,然后对这些路径应用自定义条件来允许或拒绝访问。

Firebase 安全规则的表达式语言有两种类型。第一种是使用 JSON 语法格式化的 Realtime Database 安全规则。另一种是遵循通用表达式语言(Common Expression Language)语法的 Cloud Firestore 和 Cloud Storage 安全规则。

编写 Realtime Database 安全规则

Realtime Database 使用 JSON 格式的规则语法来确定谁有权读取或写入数据库。这些规则存储在 Firebase 服务器上,并在每个请求时自动强制执行。因此,只有经过批准的读写请求才能完成。

要开始编写 Realtime Database 安全规则,我们必须首先识别数据库中的一个节点。然后,可以使用通配符匹配可能的子节点以创建路径。接下来,使用条件语句为这些路径定义规则:

1{ 2 "rules": { 3 "<<path>>": { 4 // 如果每种方法的条件为真,则允许该请求。 5 ".read": <<condition>>, 6 ".write": <<condition>> 7 } 8 } 9}

所有 Realtime Database 安全规则均以第 2 行的 rules 键开头。然后,我们需要指定一个路径以及该路径的读取和写入条件。例如,以下规则允许对 /tasks/ 路径的所有读取操作,但拒绝对该位置的所有写入操作:

1{ 2 "rules": { 3 "tasks": { 4 ".read": true, 5 ".write": false 6 } 7 } 8}

Realtime Database 安全规则包含内置变量,允许我们引用其他路径、身份验证信息等。例如,以下规则为路径 users/<uid> 定义读写操作,其中 uid 可以是我们应用程序中任意用户的唯一标识符:

1{ 2 "rules": { 3 "users": { 4 "$uid": { 5 ".read": true, 6 ".write": "$uid === auth.uid" 7 } 8 } 9 } 10}
  • 第 3 行: 我们在 Realtime Database 中识别 users 父节点。
  • 第 4 行:我们使用通配符 $uid 匹配 users 节点下的所有子节点。
  • 第 5 行: 我们允许该位置的所有读取操作。
  • 第 6 行: 我们通过将通配符与 Firebase Authentication 获取的用户 ID 进行比较,授予已认证用户对该位置的写入权限。

操作步骤

  • 阅读 Firebase 文档 中关于 Realtime Database 安全规则的更多信息。
  • 前往 Firebase 控制台的“Realtime Database”部分,为我们的 Realtime Database 编写新的安全规则,要求对 tasks 路径允许所有读取操作,但仅允许已认证用户写入。
1{ 2 "rules": { 3 "tasks": { 4 ".read": true, 5 ".write": "auth.uid != null" 6 } 7 } 8}
1{ 2 "rules": { 3 "tasks": { 4 ".read": true, 5 ".write": "auth.uid != null" 6 } 7 } 8}

注意: 查看上方提示,确保你的数据库规则正确无误。

Firebase 中的环境变量

Cloud Firestore 和 Cloud Storage 安全规则