没有用户身份验证的Firebase数据库安全规则

时间:2020-03-11 10:58:33

标签: firebase unity3d firebase-realtime-database firebase-authentication firebase-security

如何在没有用户身份验证的情况下为数据库设置安全规则,即用户只能在其中更改自己的数据。 首次启动应用程序时,将添加新数据项,而无需任何身份验证并具有唯一ID。

我的JSON数据如下:

{
  "Rand3435" : {
    "Score" : 10,
    "DID" : "Rand3435",
    "CanDance" : "No"
  },
  "Rand7765" : {
    "Score" : 25,
    "DID" : "Rand7765",
    "CanDance" : "Yes"
  },
  "Rand6769" : {
    "Score" : 0,
    "DID" : "Rand6769",
    "CanDance" : "No"
  },
  "Rand1326" : {
    "Score" : 10,
    "DID" : "Rand1326",
    "CanDance" : "No"
  },
  "Rand9879" : {
    "Score" : 10,
    "DID" : "Rand9879",
    "CanDance" : "Yes"
  },
  "Rand5455" : {
    "Score" : 10,
    "DID" : "Rand5455",
    "CanDance" : "No"
  },
  "Rand2322" : {
    "Score" : 19,
    "DID" : "Rand2322",
    "CanDance" : "No"
  }
}

放在“规则”部分中的JSON格式规则是什么?

请帮助,我是Firebase的新手。谢谢

2 个答案:

答案 0 :(得分:0)

  1. 首次启动应用程序时,在共享的首选项中存储唯一ID。
  2. 每当用户想要对数据库进行任何更改时,请检查数据库中是否存在唯一ID。
  3. 如果存在唯一ID,则用户可以修改数据,否则不可以。

答案 1 :(得分:0)

如果您想保护对用户数据的访问,但又不想要求用户提供凭据,则需要Firebase的anonymous authentication。使用匿名身份验证,您只需通过以下简单的调用即可登录用户:

FirebaseAuth.getInstance().signInAnonymously();

从那里开始,用户具有一个标识他们的UID,您可以在数据中使用此UID将数据与该用户相关联,然后在安全规则中使用,以确保仅允许授权访问,如文档中所示。 user based security


如果您坚持要生成自己的ID,则可以确保只有知道ID的人才能使用以下代码编写具有该ID的文档:

{
  "rules": {
    ".read": false,
    "$DID": {
      // anyone who knows a DID can read its contents
      ".read": true, 

      // anyone who knows a DID can write its contents, as long as they specify the DID in the contents too
      ".write": "newData.child('DID').val() === $DID"
    }
  }
}

因此,用户必须在DID属性和路径中指定相同的ID,才能进行写入。由于在根目录上没有读取权限,因此某人无法获取所有数据(以及所有DID)的列表。