无法使用BackFire Collection向Firebase用户收集新的“用户”行

时间:2014-02-04 02:00:22

标签: firebase firebase-security

在用户使用FirebaseSimpleLogin成功注册后,我正在使用Backfire Collection尝试向Firebase中的自定义“用户”集合添加新用户行。

以下是我的安全规则:

"users": {
  "$user_id": {
    ".read": "auth.id === $user_id",
    ".write": "(!data.exists() && (newData.child('id').val() + '' === auth.id)) || ($user_id ===  auth.id)"
  }

安全规则应该完成以下任务:

  1. 允许新注册的用户创建新的“用户”行,因此他的个人信息存储在“http://myurl.firebase.com/users/1/”网址下。

  2. 登录用户只能读取自己的用户行。

  3. 登录用户只能更新自己的用户行。

  4. 但是,我使用以下代码拒绝了权限:

        var FireUsers = Backbone.Firebase.Collection.extend({
          model   : Backbone.Model,
          firebase: new Firebase(FirebaseURL + '/users/')
        }),
        fireUsers = new FireUsers();
    
        fireUsers.add(newUserObj);
    

    我在模拟器中尝试了它,并且我能够满足上述3个条件的唯一方法是将安全规则设置为“auth!= null”,这显然不是理想的。

    感谢任何帮助!

    托尼

1 个答案:

答案 0 :(得分:0)

如果登录用户只能读取users表中的行,则无法为整个用户集创建集合(因为这意味着每个人都可以读取users表)。为特定URL创建Backbone.Firebase.Collection的新实例将立即尝试下载该URL上的所有数据,由于安全规则,这些数据将失败。

我建议改为使用Backbone.Firebase.Model,并直接在包含用户ID的网址上为用户创建新实例。