Как установить пользовательский ID при нажатии нового объекта в Firebase

Я использую Firebase с AngularJS в моем приложении. Когда пользователь входит в приложение с аутентификацией Facebook, я хочу создать новый объект пользователя (с некоторыми свойствами, поступающими из Facebook и некоторыми относительно моего приложения) и сохранить его в Firebase. Это просто, я нажимаю новый объект пользователя:

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

push() генерирует уникальный идентификатор, smth. например: - J08SgyOeOU_fFb1CB3G. Поэтому единственный способ получить доступ к этому объекту пользователя-использовать этот ID:

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

но когда я получаю данные аутентификации от Facebook, у меня есть только идентификатор Facebook, и нет никакого способа узнать идентификатор Firebase, созданный ранее (иначе мне пришлось бы поддерживать карту всех пользователей, чего я не хочу). Так вот вопрос: как сохранить нового пользователя в Firebase с пользовательским идентификатором, например Facebook ID?

3 ответов


вместо push() используйте set() С ID Facebook:

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

если вы используете простой логин и несколько провайдеров аутентификации (например, Facebook и Twitter одновременно) тогда убедитесь, что вы разделили своих пользователей по провайдеру, так как идентификаторы могут столкнуться

travelBidsFirebaseRef.ребенок ("пользователь / facebook/" + facebookId).set (пользователь, обратный вызов);

обновление

по состоянию на FirebaseSimpleLogin 1.0, теперь вы можете использовать uid, который уникален для всех поставщиков:

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

вы также можете попробовать что-то вроде этого:

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

сделать что-то вроде этого:

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