我的应用无法多次向Firebase发送相同的数据结构

时间:2014-03-06 18:33:18

标签: javascript firebase

每次用户在chatApp中发送消息时,我都会尝试复制此数据结构:

{
   entries: {
      users: {
         "twitter username": {
            "unique key assigned by firebase": {
               name: "twitter username",
               text: "whatever which user writes"
            }
         }
      }
   }
}

所以我尝试了这个:

var entryRef = new Firebase('https://ranchat.firebaseio.com:443/entries/users/');
var messagesRef = entryRef.child(name);

// When the user presses enter on the message input, write the message to firebase.
$('#messageInput').keypress(function (e) {
if (e.keyCode == 13) {
  // You shouldn't allow an empty entry
  var text = $('#messageInput').val();
  messagesRef.push({name:name, text:text});
  $('#messageInput').val('');
}
});

Here is the whole code of my app

但消息只是发送到firebase一次。也就是说,我可以在<input>上写一条消息,按 Enter 并将其发送到Firebase(the data appear in it),但如果我想重复相同的操作,则数据不会出现在其中。由于用户必须使用Twitter登录才能发送消息,我尝试从其他会话发送数据(使用其他Twitter帐户登录)但是它不起作用;在第一条消息之后,没有人可以发送数据,既不是同一个用户也不是另一个用户。

在我尝试向Firebase发送另一封邮件的那一刻,我在JS控制台中收到此错误:

"FIREBASE WARNING: set at /entries/users/jobsamuel/-JHXOGvd2Gw1Z8UAZ5X8 failed: permission_denied "

我不知道我做错了什么,或者我不做什么。

1 个答案:

答案 0 :(得分:1)

我在Firebase Forge的安全规则中修改了data.exists()验证,它可以运行:

{
"rules": {
".read": true,
"$comment": {
  ".write": "!data.exists() && newData.child('twitter_id').val() == auth.id"
   }
 }
}

问题是 。当我复制Firebase简单登录(Twitter)的auth有效负载时,我没有意识到可能的后果。现在,根据此规则,数据将按我的要求发送:

{
"rules": {
".read": true,
".write": "data.exists() && newData.child('twitter_id').val() == auth.id"
  }
}

-

但并非所有这一切都是完美的。我不明白两件事。

第一个:使用新规则,如果root directory is empty,我无法将数据发送到Firebase。我只需要.push().set()之前的内容。

第二个:我需要在我的Firebase参考中的 .com 之后添加;如果我不放并且我不知道原因,则不会发送数据。

var entryRef = new Firebase('https://ranchat.firebaseio.com:/entries/');
var messagesRef = entryRef.child(name).child('messages');

// When the user presses enter on the message input, write the message to firebase.
$('#messageInput').keypress(function (e) {
if (e.keyCode == 13) {
  // You shouldn't allow an empty entry
  var text = $('#messageInput').val();
  messagesRef.push({name:name, text:text});
  $('#messageInput').val('');
  }
});
嗯......到目前为止,我觉得我很好。谢谢你的帮助!