Firebase 读取权限

迈克

所以我建立了一个简单的 db/web 表单来收集一些用户数据。Rn 我试图弄清楚规则的事情,但我遇到了这个问题 - 如果我的read标志设置为true那么我可以简单地在控制台中运行它

var ref = firebase.database().ref();

ref.on("value", function(snapshot) {
   console.log(snapshot.val());
}, function (error) {
   console.log("Error: " + error.code);
});

并暴露用户这不应该是可能性。如果我设置read为,false则无法预先访问数据库以验证电子邮件地址是否唯一。我想我需要实现两件事:

  • 通过运行任何片段的开发工具防止数据库窥探
  • 确保电子邮件地址是唯一的。

ps 我的当前规则(防止删除,防止读取,确保 POST 请求具有某些字段):

{
  "rules": {
    "users": {
        ".read": false,
        "$uid": {
         ".write": "!data.exists()",
         ".validate": "newData.hasChildren(['first_name', 'last_name', 'email', 'country', 'amount'])"
       }
    }
  }
}
土豆泥

为避免重复,您需要在数据库中进行验证检查,而不是从客户端读取数据并进行检查(您不能信任客户端)。

由于没有简单的方法可以检查 firebase 基础集合中的重复子值,因此您需要一个单独的集合来跟踪电子邮件,然后根据该集合验证您的电子邮件,即:

{
  "rules": {
    "users": {
       ".read": false,
       "$uid": {
         ".write": "!data.exists()",
         ".validate": "newData.hasChildren(['first_name', 'last_name', 'email', 'country', 'amount'])",
         "email": {
           ".validate": "!root.child('emails').child(newData.val()).exists()"
         }
       }
    },
    "emails": {
       ".read": false,
       ".write": "!data.exists()"
    }
  }
}

然后,您需要在添加用户时将用户的电子邮件写入电子邮件集合,例如:

var ref = firebase.database().ref('emails/'+email);
ref.set(uid)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章