Reputation: 54
I am using expo client for my app. When I send the email, the verification immediately fails. When I go to the email and verify it, the verification still doesn't work. This is my function:
firebase.auth().createUserWithEmailAndPassword(emailID, password)
.then(async ({
user
}) => {
//console.log(this.state)
await user.sendEmailVerification().then(async () => {
user = await firebase.auth().currentUser;
await user.reload();
user = await firebase.auth().currentUser;
if (user.emailVerified) {
db.collection("Users").add({
'firstName': this.state.firstName,
'lastName': this.state.lastName,
'contact': this.state.contact,
'emailID': this.state.emailID,
'password': this.state.password,
'description': '',
'profilePicture': ''
})
return alert('Account has been created. You can now login.');
} else {
return alert('Failed to verify email!')
}
})
})
.catch((error) => {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
return alert(errorMessage);
});
Can anyone please provide me a solution for this? Thanks,
Upvotes: 1
Views: 1373
Reputation: 598847
The code in your inner then
block looks good, but it runs only once: immediately after you sent the verification email.
When you call sendEmailVerification
that merely sends the email. Only once you click the link in that email will the email address on the profile be set to verify.
So you will need to re-sign in, or call user.reload()
, after clicking the link in order to get the profile with the updated verification status. This means you'll typically run the code that you have in then then
block:
You can pick one of these, but also use any combination of them to ensure the verification status gets picked up quickly in your app.
Upvotes: 1