Как установить пользовательский 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"
}
});