firebase once()给出权限错误,尽管ref()成功

时间:2014-06-10 15:39:21

标签: permissions firebase

目标:扫描firebase数据并删除超过给定时间的项目。

问题:查询生成权限错误,但允许其他读取操作。然而问题似乎是.read规则,因为当它被取出时,一切正常。

我使用嵌入了“username”和“dataClass”的令牌进行身份验证。身份验证通常正常,订阅的客户端正在接收更新。调试日志并检查auth()有效负载表明“username”和“dataClass”正确嵌入到令牌中并由Firebase正确提取。

但是,尝试使用once()来获取早于特定年龄的数据子集会产生权限错误。我可以使用ref()查看数据位置,但没有错误。为什么ref()工作而查询不起作用?可能的基本误解:查询是返回数据的副本,就像在SQL数据库中一样,还是返回指向数据的指针?

这是代码,后面是使用的规则。非常感谢。

var Firebase = require('firebase');
Firebase.enableLogging(true, true);

// auth token is passed in as an argument
var token;
process.argv.forEach(function(val, index, array) {if (index==2) {token=val;} });

var oneHourAgo=(new Date).getTime() - (minutes*60000);

var fb=new Firebase("https://<mysite>.firebaseio.com/changeMessages");
connect2Firebase(fb,token);


function connect2Firebase(firebase,authToken) {
  firebase.auth(authToken, function(error,payload) {
    if(error) {
      console.log("Login Failed!", error);
    } else {
      console.log("Login Succeeded!");
      console.log(payload);
      doSomething();
    }
  });
}


function doSomething() {
  // THIS GIVES PERMISSION ERROR
  fb.endAt(oneHourAgo).once('value', function(ss) { console.log(ss.val()); });

  // THIS WORKS
  //console.log(fb.endAt(oneHourAgo).ref().toString());
}


// THE RULES.  Changing to ".read":true makes it work.
{
  "rules": {
    "changeMessages": {
      "$dataClass": {
      ".read": "auth.dataClass == $dataClass && auth.username == 'admin'",
      ".write": "auth.username == 'admin'"
  }
}

} }

0 个答案:

没有答案