Firebase如何比较数据规则中的变量(== vs ===)?

use*_*ond 4 javascript comparison firebase firebase-security firebase-authentication

以下提供的信息直接来自Firebase网站.

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

当客户端尝试访问/ users/barney时,$ user默认位置将匹配$ user等于"barney".因此.read规则将检查auth.uid ==='barney'.因此,只有当客户端使用"barney"的uid进行身份验证时,读取/ users/barney才会成功.

Firebase擅长记录,但我没有找到关于使用"=="或"==="的深入讨论.只要我知道它就像JavaScript一样工作.

根据他们的文件

如果auth.uid ==='barney'.因此,只有当客户端使用"barney"的uid进行身份验证时,读取/ users/barney才会成功.

有时我见过

"$user": {
        ".read": "auth.uid == $user",
        ".write": "auth.uid == $user"
 }
Run Code Online (Sandbox Code Playgroud)

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

car*_*ant 6

如果您咨询火力地堡数据库安全规则API 文档,你会看到下面的定义等号:

===(等于)

...
注意:: ==被处理为===.如果在安全规则中使用==,则在运行规则时将其转换为===.

并且不等于:

!==(不等于)

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