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

rek*_*irt 2 firebase angularfire

我目前正在尝试通过AngularFire $set()方法向Firebase添加新用户.我正在通过$createUserAngularFire 的方法创建新用户.我的代码看起来像这样:

$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);
        }
      });
}
Run Code Online (Sandbox Code Playgroud)

这是一个创建新用户并将新用户对象放在用户内部:{..},但是,它还添加了一个仅复制数据的附加用户子对象 - 这是代码添加到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"
    }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望我的用户对象看起来像firebase中的示例,除非每个用户键都是内部的 user.uid

users: {
    user1: {
      name: "Alice"
    },
    user2: {
      name: "Bob"
    }
}
Run Code Online (Sandbox Code Playgroud)

将每个新用户添加到users: {...}密钥而不添加重复用户子项的位置?

Kat*_*ato 5

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

选择创建同步对象时要在其中设置数据的路径.

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

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

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

创建配置文件在Firebase文档中进行了解释,并在AngularFire-Seed repo的createProfile服务中进行了介绍,几乎完全按照您的示例进行操作.