bryan
bryan

Reputation: 9399

get UID of recently created user on Firebase

Is there a way to get the UID of a recently created user?

According to createUser() documentation, it doesn't look like it returns anything.

How would one go about obtaining this information so that we can start storing information about the user?

I know a way that could be achieved would be logging in the user upon creation. But I don't want to overwrite my existing session.

var firebaseRef = new Firebase('https://samplechat.firebaseio-demo.com');
  firebaseRef.createUser({
    email    : "bobtony@firebase.com",
    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!
    }
  });

Upvotes: 4

Views: 5744

Answers (4)

reverie_ss
reverie_ss

Reputation: 2704

The above answers are for old firebase. For the ones looking for new firebase implementation :

     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);

      });

Source : Firebase Authentication Documentation

Upvotes: 5

Rob DiMarco
Rob DiMarco

Reputation: 13266

Firebase recently released an updated JavaScript client (v2.0.5) which directly exposes the user id of the newly-created user via the second argument to the completion callback. Check out the changelog at https://www.firebase.com/docs/web/changelog.html and see below for an example:

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

Upvotes: 2

bryan
bryan

Reputation: 9399

I asked this question on the support forums of firebase and got this answer from Jacob. I hope this helps anyone having the same issue.

Copy and pasted from http://groups.google.com/group/firebase-talk/


All you need to do is just authenticate to a different Firebase context. You can do this via an undocumented context argument when creating a new Firebase object.

// 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;
          }
        });
      }
    });
  }
});

Note that we will be releasing a new version of Firebase soon that does return the uid in the createUser() callback. At that point, this somewhat hacky workaround will not be needed.

Upvotes: 0

Frank van Puffelen
Frank van Puffelen

Reputation: 600131

After the user is created you can authenticate him as mentioned right above the code sample on the page that you link to:

Creates a new email / password based account using the credentials specified. After the account is created, users may be authenticated with authWithPassword().

then in the authWithPassword callback, you can access the new user's auhtData. https://www.firebase.com/docs/web/api/firebase/authwithpassword.html

Upvotes: 1

Related Questions