Skip to content

Instantly share code, notes, and snippets.

@katowulf
Last active April 24, 2023 07:14
Show Gist options
  • Star 75 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save katowulf/6479129 to your computer and use it in GitHub Desktop.
Save katowulf/6479129 to your computer and use it in GitHub Desktop.
Methods to search for user accounts by email address in Firebase
/***************************************************
* Simple and elegant, no code complexity
* Disadvantages: Requires warming all data into server memory (could take a long time for MBs of data or millions of records)
* (This disadvantage should go away as we add optimizations to the core product)
***************************************************/
var fb = firebase.database.ref();
/**
* @param {string} emailAddress
* @return {Object} the object contains zero or more user records, the keys are the users' ids
*/
function findUsersMatchingEmail( emailAddress, callback ) {
fb.child('user').orderByChild('emailAddress').equalTo(emailAddress).once('value', function(snap) {
callback( snap.val() );
});
}
/***************************************************
* Useful for MBs or more of data, or lists of thousands or more records
* Disadvantages: Slight code complexity due to two queries (one for key, another for record); escaping emails is annoying
***************************************************/
var fb = firebase.database.ref();
/**
* Looks up a user id by email address and invokes callback with the id or null if not found
* @return {Object|null} the object contains the key/value hash for one user
*/
function getUserIdByEmail( emailAddress, callback ) {
fb.child('emails_to_ids/'+emailToKey(emailAddress)).once('value', function(snap) {
callback( snap.val() );
});
}
/**
* Creates a new user record and also updates the index
*/
function createNewUser( userRecord ) {
var uid = fb.child('user').push().key();
// do a multi-path write!
var mergedData = {};
mergedData['users/' + uid] = userRecord;
mergedData['emails_to_ids/'+emailToKey(userRecord.email)] = uid;
fb.update(mergedData);
return id;
}
/**
* Firebase keys cannot have a period (.) in them, so this converts the emails to valid keys
*/
function emailToKey(emailAddress) {
return emailAddress.replace(/[.]/g, '%20');
}
@jek-bao-choo
Copy link

@nderkach
Copy link

nderkach commented Dec 3, 2017

Now you can just do the following:

admin.auth().getUserByEmail(email)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully fetched user data:", userRecord.toJSON());
  })
  .catch(function(error) {
    console.log("Error fetching user data:", error);
  });

See https://firebase.google.com/docs/auth/admin/manage-users for details.

@yashrabari
Copy link

@nderkach it works!
thanks man

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment