我目前正在尝试通过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: {...}
密钥而不会复制用户子项?
答案 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中进行了介绍,几乎逐字逐句。