匿名发送数据到Firebase

时间:2018-06-10 16:45:00

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

我希望匿名用户能够将数据发送到Firebase,但不能删除或覆盖它。

这是我最近一直在使用的:

我的数据库规则:

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

我的javascript片段:

firebase.initializeApp({
    apiKey: "asdasd",
    databaseURL: "asdasd.firebaseio.com/"
});

var id = Math.random().toString(36).substr(2, 9);
var userData = 'hello';
var sendData = firebase.database().ref("data/" + id + "/").update({userData});

sendData.then(function() { console.log("data sent!") })

显而易见的问题是我在脚本中暴露了我的apiKey,任何人都可以覆盖或删除数据。有没有实际的解决方案?

2 个答案:

答案 0 :(得分:2)

要仅允许用户编写新数据而不更改现有数据,您可以在规则中执行此操作:

{
  "rules": {
    ".read": false,
    ".write": "!data.exists()"
  }
}

另见Firebase documentation on existing vs new data

我建议使用Firebase的内置push()方法来生成密钥,因为这会为您的随机数发生器增加一些可预测性而不会牺牲密钥的不可用性:

firebase.database().ref("data")
  .push({userData})
  .then(function() { console.log("data sent!") });

答案 1 :(得分:0)

嘿,我想你应该这样做

reference= FirebaseDatabase.getInstance().getReference("announcement");
                AbsAnnouncementmodel absAnnouncementmodel=new AbsAnnouncementmodel(receiver,announcement);
                reference.push().setValue(absAnnouncementmodel);

此处与DatabaseRefence相关的参考