Firebase auth.id映射到用户特定的路由

时间:2014-02-09 02:44:49

标签: firebase firebase-security

我坚持使用Firebase安全规则。我不明白它如何将“网址”映射到$variable

这两个如何映射?

"$user": {
  ".read": "$user == 42" // where does this $user get its value from?
}

鉴于此规则集:

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

不起作用:

Attempt to read /users/twitter/169508069 with auth={"id":169508069}
    /
    /users
    /users/twitter
    /users/twitter/169508069: "$user == auth.id"
        => false

No .read rule allowed the operation.
Read was denied.

Works :(将规则更改为固定用户ID)

Attempt to read /users/twitter/169508069 with auth={"id":169508069}
    /
    /users
    /users/twitter
    /users/twitter/169508069: "169508069 == auth.id"
        => true

Read was allowed.

根据$location variables的文档,我认为我的$user".read": "$user == auth.id"的映射是正确的,但我必须遗漏一些内容。

1 个答案:

答案 0 :(得分:2)

哇!所以实际问题是我在模拟器中将auth.id的规则注册为169508069整数。 $ user的值为"169508069",即字符串。当我手动设置要比较的值(整数)时,它当然有效。

追踪非常棘手。

对Firebase人员的建议:在安全模拟器输出中打印$variable的计算值,以帮助隔离安全问题。

对于其他人来说,只需要警惕数据类型。