17

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

...
var travelBidsFirebaseRef = new Firebase(url);
var newUserRef = travelBidsFirebaseRef.child("user").push(user, callback);
...

push()生成一个唯一的 ID,smth。像:-J08SgyOeOU_fFb1CB3G。所以我可以访问这个用户对象的唯一方法是使用这个 ID:

angularFire(travelBidsFirebaseRef + "/user/-J08SgyOeOU_fFb1CB3G", $scope, 'user', {});

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

4

3 回答 3

23

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

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

如果您使用简单登录和多个身份验证提供程序(例如同时使用 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);
});
于 2013-08-05T14:04:09.217 回答
15

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

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

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

empsRef.child('22222').set({
  lastname: "Nut",
  firstname: "Dough"
});

输出应如下所示:

"employees" : {
  "11111" : {
    "lastname" : "Lee",
    "firstname": "Kang"
  },
  "22222" : {
    "lastname" : "Nut",
    "firstname": "Dough"
  }
}

于 2016-04-21T03:24:00.920 回答
-1

做这样的事情:

  employees.update({
    "1" : {
      "lastname" : "Doe",
      "firstname": "John"
    },
    "2" : {
      "lastname" : "Loca",
      "firstname": "Maria"
    }
  });
于 2018-07-04T15:07:47.703 回答