【问题标题】:How does Firebase compares a variable (== vs ===) in Data Rules?Firebase 如何比较数据规则中的变量(== vs ===)?
【发布时间】:2016-12-19 19:38:59
【问题描述】:

下面提供的信息直接来自 Firebase 网站。

{
  "rules": {
    "users": {
      "$user": {
        ".read": "auth.uid === $user",
        ".write": "auth.uid === $user"
      }
    }
  }
}

当客户端尝试访问 /users/barney 时,$user 默认 location 将匹配 $user 等于“barney”。所以 .read 规则将检查 auth.uid === 'barney'。结果,阅读 /users/barney 只有在客户端通过 “barney”的 uid。

Firebase 擅长记录,但我没有发现任何关于使用“==”或“===”的深入讨论。只要我知道它就像 JavaScript 一样工作。

根据他们的文档

如果 auth.uid === 'barney'。结果,阅读 /users/barney 只有在客户端通过 "barney" 的 uid。

有时我见过

"$user": {
        ".read": "auth.uid == $user",
        ".write": "auth.uid == $user"
 }

所以我的问题是哪一种方法是正确的?当我们在规则中使用“==”和“===”时会发生什么?

【问题讨论】:

  • 你的问题和the one you linked有什么不同?据我所知,那里的答案回答了你的问题。鉴于 here 它声称这些表达式是“类似 JavaScript”的,因此除非有相反的文档,===== 的相同含义可能适用?
  • 我想知道 Firebase 是否对待“==”和“===”相同!
  • 嗯,它说语法是“类 JavaScript”。除非他们告诉你其他事情,否则这不是告诉你 ===== 做了什么吗?
  • 我认为它确实像 Javascript,但我无法找到它。即使他们执行“auth.uid === 'barney'”,它也会与他们的文档相矛盾。因为如果他们使用“===”,则意味着他们正在检查 auth.uid 是否也是字符串,而不是比较“auth.uid”的内容!
  • @user2884707bond "用于检查规则表达式中的两个变量是否具有相同的类型和值"

标签: javascript firebase comparison firebase-authentication firebase-security


【解决方案1】:

如果您查阅 Firebase 数据库安全规则 API documentation,您将看到 equals 的以下定义:

===(等于)

...
注意:: == IS TREATED AS ===. 如果您在安全规则中使用 ==,则在规则执行时它将被转换为 ===运行。

对于not equals

!==(不等于)

...
注意:!= 被视为 !==。 如果您在安全规则中使用 !=,则在运行规则时它将被转换为 !== .

【讨论】:

  • 对于 >= 和 是一样的
【解决方案2】:

我认为 Firebase 将所有 === 视为 ==(类似地将所有 !== 视为 !=)。

我的证据是Bolt Compiler 将螺栓文件中的三重运算符转换为规则 JSON 输出中的双运算符。

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 1970-01-01
    • 2018-09-03
    • 2013-09-30
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    相关资源
    最近更新 更多