0

几个星期前我试过了,但它不起作用,我刚才又试了一次,它仍然不起作用。我只在身份验证完成后分配事件处理程序。在我的代码中,延迟机制是使用 $scope.$watch 执行的。

安全规则:

{
"rules": {
"chats": {
  "$org": {
    ".read": "auth != null",
    ".write": "auth.org == $org"
  }
}
}
}

服务:

"$$fbase": ['$timeout', function($timeout) {
  return {
    ...
    ref: function(path) { var self = this;
      var ref = new Firebase(self.url + path);
      self.ready = false;
      ref.auth(self.auth_token, function(err) {
        if (!err) {
          if (console) console.log(path+" login succeeded.");
          $timeout(function() { self.ready = true; });
        }
      });
      return ref;
    },
    bind: function(ref, excludes, limit, start) { var self = this;
      var result = {total: 0, list: []};
      ref.on('value', function(data) { result.total = data.numChildren(); });
      return result;
    },
  }
}],

控制器:

QuickMsgCtrl: ['$scope', '$$fbase', '$timeout', 
    function($scope, $$fbase, $timeout) {
  var ref = $$fbase.ref("/chats/abc");
  $scope.$watch(function() { return $$fbase.ready }, function() {
    if ($$fbase.ready) {
      var data = $$fbase.bind(ref);
      $scope.listing = data.list;
    }
  });
}],

铬控制台:

/chats/abc login succeeded.
FIREBASE WARNING: on() or once() for /chats/abc failed: permission_denied  

在这一点上,我很清楚你这边有一个错误,尽管登录成功,但我还是允许我进行简单的阅读。

不,AngularFire 对我来说毫无用处,因为它不进行身份验证,而且漏洞百出。

4

0 回答 0