新用户的Firebase数据库安全性

时间:2019-08-21 12:27:15

标签: javascript firebase firebase-realtime-database firebase-security

有没有一种方法可以使用最初在用户创建时设置的规则来检查值?

我细读了Firebase文档,但无济于事。

调用函数createUserWithEmailAndPassword时,我将在数据库中创建一些值,例如:

    "users": {
        "ht35resf435dwe3rfdw": {
            "is_premium": false,
            "display_name" "John",
            "last_login": 15353723826
        }
    }

我面临的问题是:is_premium: false是前端代码的一部分,我担心用户会以某种方式将其更改为is_premium: true

我想不出一种方法来检查它在创建时最初设置为false。

P.s我可能会犯错,我是一名初中生,所以我很感谢所有指针。

3 个答案:

答案 0 :(得分:1)

要仅允许将值设置为false,可以使用验证规则:

{
  "rules": {
    "users": {
      "$uid": {
        "is_premium": {
          ".validate": "newData.isBoolean() && newData.val() == false"
        }
      }
    }
  }
}

以上内容仅允许false由任何客户端编写。但是,当您使用Admin SDK进行写操作时,这些写操作会绕过这些安全规则。因此,您可以使用Admin SDK标记高级用户。

答案 1 :(得分:0)

我刚开始使用Firebase,所以我无法提供太多信息。如果您想开始学习它,可以看个很棒的series。另外,我建议使用Cloud Firestore代替实时数据库,因为阶梯较旧且功能较少。更改数据库上的安全规则将使您无所事事,用户可以编辑数据。您需要做的是将premium默认设置为false甚至在数据库中不存在,然后创建一个javascript函数以在数据库中创建或将其更改为true。

编辑:

Ajith Naruto可以工作,但也不允许所有从Web应用程序写入数据库。

编辑2:

弗兰克·范·普菲伦(Frank van Puffelen)的工作应该奏效,我不会回答他的问题。

答案 2 :(得分:0)

您可以按照以下方式更改安全规则,以使用户无法进行更改。

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}