Security API auth和$ variables不相等

时间:2012-12-24 10:07:57

标签: firebase

我为我的应用程序尝试了以下安全规则但遇到了问题。我的firebase中有一个用户,唯一ID为2.

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

我已经检查过当我".write": "$user == 2"时,我将无法在firebase上写,但当我".write": "$user == '2'"时,我将能够在firebase上写。

另一方面,当我做".write": "auth.id == 2"时,我可以在firebase上写字。

似乎$ user被视为一个字符串,而auth.id被视为一个数字。我已经在https://www.firebase.com/docs/security/检查了文档,但事实证明这对此无益。

在绝望的尝试中,我尝试了".write": "$user == auth.id.toString()",当然这给了我这个错误:“6:29:输入错误:对目标的函数调用不是函数。”

有人可以就此事向我提供一些建议吗?

我能想到的唯一解决方法是将“userId”作为子用户包含在$ user中,它将被读作数字值而不是字符串。

2 个答案:

答案 0 :(得分:2)

有两个非显而易见的细节可能会使你绊倒。

始终使用===

评估安全规则

您的==会被安全规则自动转换为===;要阅读更多相关信息,请查看文档的“rules expressions”部分。

记录ID转换为字符串

您插入的用户ID(2)正在转换为字符串(我找不到该文档,但请记住阅读它)。换句话说,记录ID为"2"而不是2,因此您在auth数据中的值需要与之匹配。

希望这会有所帮助:)

答案 1 :(得分:2)

需要在Firebase模拟器中为我的工作解决方法(在另一个答案的评论中提到):

$user == '' + auth.id