Firebase Detecting if user exists
For me fetchSignInMethodsForEmail()
only works with an email that is registered with email/password and not working for emails registered with Apple, LinkedIn or other providers.
For solution to this, I came up with following work around:
auth().signInWithEmailAndPassword(email, 'some-random-password') // Password should be really long to avoid actually logging in :)
.then((response) => {
// TODO : Avoid this block
})
.catch((error) => {
if(error.code === 'auth/wrong-password'){
// TODO : If here then it means account already exists...
}
if(error.code === 'auth/user-not-found'){
// TODO : If here then you guessed it... you can create a new account.
}
})
I'm sure there is a proper solution for this and I will update this answer when I find it.
Hope this will help someone ð
It is very simple. Add a then() and catch() to your firebase method in signUp function.
firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password)
.then(()=>{
console.log('Signup successful.');
this.setState({
response: 'Account Created!'
})
})
.catch((error)=> {
console.log(error.code);
console.log(error.message);
});
Information on different Error Codes:
auth/email-already-in-use
Thrown if there already exists an account with the given email address.
auth/invalid-email
Thrown if the email address is not valid.
auth/operation-not-allowed
Thrown if email/password accounts are not enabled. Enable email/password accounts in the Firebase Console, under the Auth tab.
auth/weak-password
Thrown if the password is not strong enough.
You need to use the fetchSignInMethodsForEmail API. It takes an email and returns a promise that resolves with the list of providers linked to that email if it is already registered: https://firebase.google.com/docs/reference/js/firebase.auth.Auth.html#fetchsigninmethodsforemail
Here's how to use the fetchSignInMethodsForEmail
API. It returns an array. If the array is empty, it means the user has never signed up/signed in to your app with the sign in methods you have used in your app.
This is an example with Google signin.
firebase
.auth()
.signInWithPopup(provider)
.then((result) => {
let token = result.credential.accessToken;
let user = result.user;
firebase
.auth()
.fetchSignInMethodsForEmail(user.email)
.then((result) => {
console.log('result', result);
});
})
.catch((error) => {
// Handle Errors here.
}