получить UID недавно созданного пользователя в Firebase

Есть ли способ получить UID недавно созданного пользователя?

Согласно документации createUser(), это не похоже на он возвращает что угодно.

Как можно получить эту информацию, чтобы мы могли начать хранить информацию о пользователе?

Я знаю, что можно было бы достичь входа в систему пользователя при создании. Но я не хочу перезаписывать существующий сеанс.

var firebaseRef = new Firebase('https://samplechat.firebaseio-demo.com');
  firebaseRef.createUser({
    email    : "[email protected]",
    password : "correcthorsebatterystaple"
  }, function(err) {
    if (err) {
      switch (err.code) {
        case 'EMAIL_TAKEN':
          // The new user account cannot be created because the email is already in use.
        case 'INVALID_EMAIL':
          // The specified email is not a valid email.
        case default:
      }
    } else {
      // User account created successfully!
    }
  });

person bryan    schedule 20.11.2014    source источник


Ответы (4)


Firebase недавно выпустила обновленный клиент JavaScript (v2.0.5), который напрямую предоставляет идентификатор только что созданного пользователя через второй аргумент обратного вызова завершения. Ознакомьтесь с журналом изменений по адресу https://www.firebase.com/docs/web/changelog.html и см. пример ниже:

ref.createUser({
  email: '...',
  password: '...'
}, function(err, user) {
  if (!err) {
    console.log('User created with id', user.uid);
  }
});
person Rob DiMarco    schedule 26.11.2014

Приведенные выше ответы предназначены для старой базы огня. Для тех, кто ищет новую реализацию firebase:

     firebase.auth().createUserWithEmailAndPassword(email, password)
      .then(function success(userData){
          var uid = userData.uid; // The UID of recently created user on firebase

          var displayName = userData.displayName;
          var email = userData.email;
          var emailVerified = userData.emailVerified;
          var photoURL = userData.photoURL;
          var isAnonymous = userData.isAnonymous;
          var providerData = userData.providerData;

      }).catch(function failure(error) {

          var errorCode = error.code;
          var errorMessage = error.message;
          console.log(errorCode + " " + errorMessage);

      });

Источник : документация по аутентификации Firebase.

person reverie_ss    schedule 12.01.2018
comment
это верный ответ - person tabebqena; 13.06.2018
comment
undefined, когда console.log для uid - person Anoob K Bava; 12.02.2019
comment
firebase.auth().onAuthStateChanged(function(user) {, #это нужно добавить после регистрации - person Anoob K Bava; 12.02.2019
comment
@AnoobKBava ага! но это только для получения UID! - person reverie_ss; 13.02.2019
comment
Я думаю, что userData - гораздо более сложный объект - для получения UID вам нужно использовать userData.user.uid. - person MarkWalczak; 19.09.2019

После того, как пользователь создан, вы можете аутентифицировать его, как указано прямо над образцом кода на странице, на которую вы ссылаетесь:

Создает новую учетную запись на основе электронной почты/пароля, используя указанные учетные данные. После создания учетной записи пользователи могут пройти аутентификацию с помощью authWithPassword().

затем в обратном вызове authWithPassword вы можете получить доступ к auhtData нового пользователя. https://www.firebase.com/docs/web/api/firebase/authwithpassword.html

person Frank van Puffelen    schedule 20.11.2014

Я задал этот вопрос на форумах поддержки firebase и получил ответ от Джейкоба. Я надеюсь, что это поможет любому, у кого есть такая же проблема.

Скопируйте и вставьте из http://groups.google.com/group/firebase-talk/


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

// adminRef will be used to authenticate as you admin user (note the "admin" context - also note that this can be ANY string)
var adminRef = new Firebase("https://<your-firebase>.firebaseio.com", "admin");
adminRef.authWithCustomToken("<token>", function(error, authData) {
  if (error !== null) {  
    // now you are "logged in" as an admin user

    // Let's create our user using our authenticated admin ref
    adminRef.createUser({
      email: <email>,
      password: <password>
    }, function(error) {
      if (error !== null) {
        // let's create a new Firebase ref with a different context ("createUser" context, although this can be ANY string)
        var createUserRef = new Firebase("https://<your-firebase>.firebaseio.com", "createUser");

        // and let's use that ref to authenticate and get the uid (note that our other ref will still be authenticated as an admin)
        createUserRef.authWithPassword({
          email: <email>,
          password: <password>
        }, function(error, authData) {
          if (error !== null) {
            // Here is the uid we are looking for
            var uid = authData.uid;
          }
        });
      }
    });
  }
});

Обратите внимание, что скоро мы выпустим новую версию Firebase, которая возвращает uid в обратном вызове createUser(). В этот момент этот несколько хакерский обходной путь не понадобится.

person bryan    schedule 21.11.2014