Установка собственного ключа пользователей в Firebase

Вопрос задан уже здесь , но поскольку AngularFire обновляет свой API, предоставленное решение больше нельзя использовать.

Что я делаю, так это создаю новую учетную запись пользователя с адресом электронной почты/паролем, сохраняю этого пользователя в службе аутентификации Firebase и сохраняю дополнительную информацию в базе данных.

Однако в аутентификации у пользователя есть свой ключ как simplelogin:29, а в данных у каждого пользователя есть свой хешированный ключ как -JpwB9oUVkeT_XRdiX2V. Мне нужно, чтобы их ключи были одинаковыми.

Ниже приведен код для создания нового пользователя, зарегистрированного с помощью auth.$createUser, и сохранения дополнительной информации в пользовательской модели.

var ref = new Firebase('https://myapp.firebaseio.com/');
var auth = $firebaseAuth(ref);

auth.$createUser({
    email: user.email,
    password: user.password 
    }).then(function(regUser) {

    var ref = new Firebase('https://myapp.firebaseio.com/users/')
    var firebaseUser = $firebaseArray(ref);

    var userInfo = {
        key         : regUser.uid, // ex: simplelogin:29
        date        : Firebase.ServerValue.TIMESTAMP,
        firstname   : user.firstname,
        lastname    : user.lastname,
        email       : user.email,
    }; // user info

    firebaseUser.$add(userInfo);
});

Это работает, но не так, как должно быть, так как ключ пользователя в аутентификации и данных все еще разные.


person cuongtn    schedule 22.05.2015    source источник


Ответы (2)


Когда вы сохраняете пользовательские данные, вы обычно хотите нажимать uid. В конце концов, uid уже уникален, и использование его в качестве ключа гарантирует, что вы никогда не получите два узла для одного и того же uid.

Когда вы вызываете $add, он генерирует новый так называемый push-ID для объекта, который вы сохраняете. Это здорово, когда у вас есть списки данных, но в этом случае ваша структура данных больше похожа на карту: вы сопоставляете uid с информацией о пользователе.

Таким образом, решение состоит в том, чтобы не вызывать $add, а вместо этого:

var ref = new Firebase('https://myapp.firebaseio.com/');
var auth = $firebaseAuth(ref);

auth.$createUser({
    email: user.email,
    password: user.password 
}).then(function(regUser) {

    var ref = new Firebase('https://myapp.firebaseio.com/users/')

    var userInfo = {
        key         : regUser.uid, // ex: simplelogin:29
        date        : Firebase.ServerValue.TIMESTAMP,
        firstname   : user.firstname,
        lastname    : user.lastname,
        email       : user.email,
    }; // user info

    ref.child(regUser.uid).set(userInfo);
});

Обратите внимание, что здесь используется обычный SDK Firebase JavaScript, который будет прекрасно взаимодействовать с любыми слушателями AngularFire. возможно, у вас уже есть данные.

person Frank van Puffelen    schedule 22.05.2015

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

var empsRef = ref.child("http://sample.com/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"
  }
}

person Lee    schedule 21.04.2016