【问题标题】:How to set a custom ID when pushing a new object into Firebase将新对象推送到 Firebase 时如何设置自定义 ID
【发布时间】:2013-08-05 17:29:33
【问题描述】:

我在我的应用程序中使用 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 将新用户保存到 Firebase,例如Facebook ID?

【问题讨论】:

    标签: angularjs firebase firebase-realtime-database


    【解决方案1】:

    不要使用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);
    });
    

    【讨论】:

      【解决方案2】:

      你也可以试试这样的:

      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"
        }
      }

      【讨论】:

      • 我终于明白了,所以我们可以使用任何级别的监听器。现在我终于弄清楚了如何正确使用实时数据库。我一直认为只能收听顶级对象。但实际上我们可以听分支。不错!
      【解决方案3】:

      做这样的事情:

        employees.update({
          "1" : {
            "lastname" : "Doe",
            "firstname": "John"
          },
          "2" : {
            "lastname" : "Loca",
            "firstname": "Maria"
          }
        });
      

      【讨论】:

      • 这个答案与 2 年前发布的答案有何不同
      猜你喜欢
      • 2023-03-04
      • 2019-12-15
      • 2020-07-08
      • 2018-07-07
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      相关资源
      最近更新 更多