Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I check if user exists in Firebase?

I finally got my authentication to work in terms of creating users and logging in and out. But now, I want to implement something that checks if the user already exists in Firebase. I've looked it up but can't seem to find a concrete answer.

For example, if my email address is: [email protected] and someone else tries to signup with the same email address, how do I tell them it's already taken?

login(e) {
    e.preventDefault();

    fire.auth().signInWithEmailAndPassword(this.state.email, this.state.password)
        .then((u) => {
        }).catch((error) => {
        console.log(error);
    });
}

signup(e) {
    e.preventDefault();

    fire.auth().createUserWithEmailAndPassword(this.state.email, this.state.password)
        .then((u) => {
        }).catch((error) => {
        console.log(error);
    });
}
like image 551
sp92 Avatar asked Jul 27 '18 17:07

sp92


People also ask

Where are Firebase users?

Firebase does not store profile or user state in your Firebase instance. To persist user data you must save it to your Firebase. Using existing social login providers such Facebook, Twitter, Google, and GitHub.


2 Answers

There's a simpler answer in the case of firebase admin sdk:

const uidExists = auth().getUser(uid).then(() => true).catch(() => false))
const emailExists = auth().getUserByEmail(email).then(() => true).catch(() => false))
like image 137
Arutyun Enfendzhyan Avatar answered Oct 25 '22 23:10

Arutyun Enfendzhyan


The error that is returned from method createUserWithEmailAndPassword has a code property. Per the documentation the error code auth/email-already-in-use:

Thrown if there already exists an account with the given email address.

At very minimum you can utilize conditional statements such as if/else or switch to check for that code and display/log/dispatch/etc a message or code to the user:

fire.auth().createUserWithEmailAndPassword(this.state.email, this.state.password)
  .then(u => {})
  .catch(error => {
     switch (error.code) {
        case 'auth/email-already-in-use':
          console.log(`Email address ${this.state.email} already in use.`);
          break;
        case 'auth/invalid-email':
          console.log(`Email address ${this.state.email} is invalid.`);
          break;
        case 'auth/operation-not-allowed':
          console.log(`Error during sign up.`);
          break;
        case 'auth/weak-password':
          console.log('Password is not strong enough. Add additional characters including special characters and numbers.');
          break;
        default:
          console.log(error.message);
          break;
      }
  });

Hopefully that helps!

like image 29
Alexander Staroselsky Avatar answered Oct 26 '22 00:10

Alexander Staroselsky