Firebase .push()会抛出'permission_denied'错误

时间:2014-06-11 19:04:34

标签: javascript firebase firebase-security

使用.push()创建输入新数据时,如下所示:

var passes = chatRef.push('passes');
    passes.set({
      userID: FirebaseRef.user.id, 
      gymName: $(this.options.data.gymName.getContent()).text().split(/[ ]+/).join(' '), 
      price: $(this.options.data.price.getContent()).text().split(/[ ]+/).join(' '),
      numDays: window.gymDays
    })

我从Firebase收到以下提醒:

FIREBASE警告:设置为/ -JPBDARJ67cnr6Yr_nGZ失败:permission_denied

我的安全规则:

{
  "rules": {
    "users": {
      ".write": true,
      "$userid": {
        ".read": "auth.id == $userid",
        ".write": true
      }
    },
    "passes": {
     ".write": true
    }
  }
}

知道如何解决?

2 个答案:

答案 0 :(得分:2)

当您致电var passes = chatRef.push('passes');时,会出现此问题。此时您实际上正在创建一个新孩子,而不仅仅是访问孩子"传递"。您的安全规则允许您写入"传递",但他们不允许您创建"传递"。

要解决此问题,请删除行var passes = chatRef.push('passes');并将其替换为var passes = chatRef.child('passes');。这样,它将访问Firebase中的子项,而不是创建一个。

修改

要添加孩子,请使用.push():

passes.push({
  userID: FirebaseRef.user.id, 
  gymName: $(this.options.data.gymName.getContent()).text().split(/[ ]+/).join(' '), 
  price: $(this.options.data.price.getContent()).text().split(/[ ]+/).join(' '),
  numDays: window.gymDays
});

答案 1 :(得分:0)

这是使用.push()的工作代码,其中将传递保存到登录的用户中:

var BASE_URL = 'ENTER YOUR FIREBASE URL';
var chatRef = new Firebase(BASE_URL);

var passes = chatRef.child('passes').child(FirebaseRef.user.id);
passes.push({
  userID: FirebaseRef.user.id, 
  gymName: $(this.options.data.gymName.getContent()).text().split(/[ ]+/).join(' '), 
  price: $(this.options.data.price.getContent()).text().split(/[ ]+/).join(' '),
  numDays: window.gymDays
});

以下是如何拨打特定用户的通行证:

var array = []

FirebaseRef.chatRef.child('passes').child(FirebaseRef.user.id).limit(100).on('child_added', function(snapshot) {this.array.push(snapshot.val())}.bind(this));