使用$ set()将用户对象添加到Firebase中的/ users

时间:2014-08-12 16:09:37

标签: firebase angularfire

我目前正在尝试通过AngularFire $set()方法向Firebase添加新用户。我是通过AngularFire的$createUser方法创建新用户的。我的代码如下所示:

$scope.createUser = function() {
      $scope.auth.$createUser('dolly@gmail.com', 'password').then(function(user, err) {
        if (err) {
          console.log('ERROR: ' + err);
        } else {
          sync.$set('users', user);
        }
      });
}

这是一个创建新用户并将新用户对象放在用户内部:{..},但是,它还添加了一个仅重复数据的其他用户子对象 - 这就是代码添加到Firebase的内容:

{
"users": {
    "email": "dolly@gmail.com",
    "id": "11",
    "isTemporaryPassword": false,
    "md5_hash": "xxxxxxxxxxxxxxx",
    "provider": "password",
    "sessionKey": "xxxxxxxxxxxxx",
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0MDc5NDQ2NDYsInYiOjAsImQiOnsicHJvdmlkZXIiOiJwYXNzd29yZCIsImlkIjoiMTEiLCJ1aWQiOiJzaW1wbGVsb2dpbjoxMSIsImVtYWlsIjoiZG9sbHlAZ21haWwuY29tIiwibWQ1X2hhc2giOiIzsdrggfeedsaadrfcDc0ZDRhMTU5NTk2NzI1NzFmMDk2ZTZlNyIsImlzVGVtcG9yYXJ5UGFzc3dvcmQiOmZhbHNlLCJzZXNzaW9uS2V5IjoiM2MwMDNjODkxMDEzOWE5MjhlZTZjNWI1NjU5ZTRiZjMifSwiaWF0IjoxNDA3ODU4MjQ2fQ.p7-9GDtaNpBn1ICTLIUSwlPytaUGi-jyBgcO-LKHUys",
    "uid": "simplelogin:11",
    "user": {
    "email": "dolly@gmail.com",
    "id": "11",
    "isTemporaryPassword": false,
    "md5_hash": "xxxxxxxxxxxxxxx",
    "provider": "dfrggrssxxxxxxx",
    "sessionKey": "xxxxxxxxxxxxxxx",
    "uid": "simplelogin:11"
    }
}

我理想地希望我的用户对象看起来像firebase中的示例,除了每个用户键都是user.uid内的任何内容

users: {
    user1: {
      name: "Alice"
    },
    user2: {
      name: "Bob"
    }
}

每个新用户都会被添加到users: {...}密钥而不会复制用户子项?

1 个答案:

答案 0 :(得分:5)

如果您创建对users/的引用,然后在该路径上调用$set,则您包含的任何数据都将替换该路径中的任何内容。这是AngularFire 101。如果不是整个指南,您应该首先阅读至少该部分。

选择创建同步对象时要设置数据的路径。

var ref = new Firebase('.../users/'+user.uid);
var sync = $firebase(ref);
sync.$set({ email: user.email, provider: user.provider });

或者,更好的是,只需将其设置在引用上,因为您不会将其用于客户端绑定。

var ref = new Firebase('.../users/'+user.uid);
ref.set({ email: user.email, provider: user.provider });

Firebase docs中解释了创建配置文件,并在AngularFire-Seed repo的createProfile service中进行了介绍,几乎逐字逐句。