将新对象推送到Firebase时如何设置自定义ID

Ale*_*ych 11 angularjs firebase firebase-realtime-database

我在我的应用程序中使用Firebase和AngularJS.当用户使用Facebook身份验证登录应用程序时,我想创建一个新的用户对象(某些属性来自Facebook,有些属性来自我的应用程序)并将其存储在Firebase中.这很简单,我正在推送新的User对象:

...
var travelBidsFirebaseRef = new Firebase(url);
var newUserRef = travelBidsFirebaseRef.child("user").push(user, callback);
...
Run Code Online (Sandbox Code Playgroud)

push()生成一个唯一的ID,smth.喜欢:-J08SgyOeOU_fFb1CB3G.因此,我可以访问此User对象的唯一方法是使用此ID:

angularFire(travelBidsFirebaseRef + "/user/-J08SgyOeOU_fFb1CB3G", $scope, 'user', {});
Run Code Online (Sandbox Code Playgroud)

但是,当我从Facebook收到身份验证数据时,我只有Facebook ID,而且我无法知道之前生成的Firebase ID(否则我将不得不维护所有用户的地图,我不想这样做).所以问题是:如何使用自定义ID(例如Facebook ID)将新用户保存到Firebase?

Kat*_*ato 16

而不是使用push(),使用set()Facebook ID:

travelBidsFirebaseRef.child("user").child(facebookId).set(user, callback);
Run Code Online (Sandbox Code Playgroud)

如果您使用简单登录和多个身份验证提供程序(例如Facebook和Twitter同时) 然后确保按提供商分割用户,因为ID可能会发生冲突

travelBidsFirebaseRef.child("user/facebook /"+ facebookId).set(user,callback);

更新

从FirebaseSimpleLogin 1.0开始,您现在可以使用uid,这在提供商中是唯一的:

new FirebaseSimpleLogin(ref, function(err, user) {
   if( err ) throw err;
   travelBidsFirebaseRef.child('user/'+user.uid).set(user, callback);
});
Run Code Online (Sandbox Code Playgroud)


小智 10

你也可以尝试这样的事情:

var empsRef = ref.child("employees");

empsRef.child('11111').set({
  lastname: "Lee",
  firstname: "Kang"
});

empsRef.child('22222').set({
  lastname: "Nut",
  firstname: "Dough"
});
Run Code Online (Sandbox Code Playgroud)

输出应如下所示:

"employees" : {
  "11111" : {
    "lastname" : "Lee",
    "firstname": "Kang"
  },
  "22222" : {
    "lastname" : "Nut",
    "firstname": "Dough"
  }
}
Run Code Online (Sandbox Code Playgroud)