Im trying to use user to the authentication of firebase and also firestore. Whhen I click on Save, the function SavePress is activated. The first time I click on this button, the user is added to firebase authentication but user is equal to null. Only at the second time it’s work. If anyone can help me..
Here is my code :
SavePress=async()=>{ if(this.state.email==="" || this.state.password==="" || this.state.firstname==="" || this.state.lastname==="" || this.state.confirmpassword==="" || (this.state.status==="")) { alert("All fields are required") } else{ await firebase.auth().createUserWithEmailAndPassword(email,password) .then( firebase.auth().onAuthStateChanged(user=> { console.log("user : ",user) if(user!=null) { firebase.firestore().collection("Users").doc(firebase.auth().currentUser.uid) .set({firstname,lastname,email,status}) .then(this.checkStatus(status,{user})) } }) ) .catch((error)=> { console.log(error.code);//revoir cette erreur if(error.code == "auth/email-already-in-use") {alert("User already exists. Try to log in")} }) } }
Advertisement
Answer
Alternatively to Aymen’s answer, you actually don’t need an onAuthStateChanged
in your then()
callback. Since the then()
callback is called when the user has been successfully created, you can simply do:
firebase.auth().createUserWithEmailAndPassword(email,password).then((credentials) => { const user = credentials.user; firebase.firestore().collection("Users").doc(firebase.auth().currentUser.uid) .set({firstname,lastname,email,status}) .then(this.checkStatus(status,{user})) ).catch((error)=>{ console.log(error.code);//revoir cette erreur if(error.code == "auth/email-already-in-use") {alert("User already exists. Try to log in")} })