简体   繁体   中英

Firebase v3 createUserWithEmailAndPassword .then Promise

Firebase v3 Reference Guide indicates that createUserWithEmailAndPassword(email, password) returns firebase.Promise containing non-null firebase.User .

The Firebase v3 Authenticate with Firebase using Password-Based Accounts Guide shows the following example

firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});

My question is, I want to fire a function which adds the user to my users node in my Realtime Database. I want to include the users display name that I collected from the sites registration form. So, it seems like I want to do a .then and if the createUserWithEmailAndPassword method was successful I want to fire a function that writes the new user (with display name) to my Realtime Database users node.

How do I modify the example script to a .then style?

Here is the correct use of then() and error handling with createUserWithEmailAndPassword :

firebase.auth().createUserWithEmailAndPassword(email, password).then(function(user) {
    var user = firebase.auth().currentUser;
    logUser(user); // Optional
}, function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
});

function logUser(user) {
    var ref = firebase.database().ref("users");
    var obj = {
        "user": user,
        ...
    };
    ref.push(obj); // or however you wish to update the node
}

I have another example here .

Check this, you need to read payload or snapshot(firebase term)

firebase.auth().createUserWithEmailAndPassword(credentials.email, credentials.password)
                .then((authData) => {
                    console.log("User created successfully with payload-", authData);
                    //Write code to use authData to add to Users
                }).catch((_error) => {
                    console.log("Login Failed!", _error);
                })

Here's what I did and it worked.

        function registerUsername(email,password,displayName){
            firebase.auth().createUserWithEmailAndPassword(email, password).then(function(value) {
                console.log(value);
                }).catch(function(error) {
                    console.log(error);
                });
        }

Just for future stumbles upon it, an await-async example:

export const doCreateUserWithEmailAndPassword = async (pEmail, pPassword) => {
    try {
        const authResult = await app.auth().createUserWithEmailAndPassword(pEmail, pPassword);
         usersRef.doc(authResult.user.uid)
            .set({
                email: pEmail,
                created: firebase.firestore.FieldValue.serverTimestamp(),
              });
    }
    catch(error){
        console.log(error);
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM