Javascript 对用户进行身份验证并同时将其添加到数据库中

Javascript 对用户进行身份验证并同时将其添加到数据库中,javascript,authentication,firebase,Javascript,Authentication,Firebase,我想注册新用户(通过auth),然后将他们(连同他们的姓名和其他信息)添加到实时数据库中的用户列表数据库中。我不知道我做错了什么。身份验证非常有效,但是新用户没有被添加到数据库中 var fname = document.getElementById('fname').value; var lname = document.getElementById('lname').value; var email = document.getElementById('email')

我想注册新用户(通过auth),然后将他们(连同他们的姓名和其他信息)添加到实时数据库中的用户列表数据库中。我不知道我做错了什么。身份验证非常有效,但是新用户没有被添加到数据库中

    var fname = document.getElementById('fname').value;
    var lname = document.getElementById('lname').value;
    var email = document.getElementById('email').value;
在下面的代码中,我注册他们,然后将他们的名字添加到DB中,然后发送验证电子邮件

function handleRegister() {
     var ref = firebase.database().ref();
     console.log(email);
     console.log(fname);

        if (email.length < 4) {
        alert('Please enter an email address.');
        return;
      }
      if (password.length < 4) {
        alert('Please enter a password.');
        return;
      }

      firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {


      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      var uid = firebase.auth().currentUser.uid; 
      // [START_EXCLUDE]
      if (errorCode == 'auth/weak-password') {
        alert('The password is too weak.');

             firebase.auth().onAuthStateChanged(user => {
        if(user) {

              var postData = {
                Fullname: fname + lname,
                  email: email,
              };

              // Write the new post's data simultaneously in the posts list and the user's post list.
              var updates = {};
              updates['/Users/' + uid ] = postData;

              return firebase.database().ref().update(updates);

        }
      })
      } else {
         console.log(error);

    }

  })
和句柄寄存器已更新为

  firebase.auth().createUserWithEmailAndPassword(email, password).then(


        addusertoDB).catch(handleCreateUserError);

它最终被添加到DB中(没有uid),但是firebase.getAuth().uid没有获得uid。我收到的错误是“firebase.getAuth不是函数”

您试图在传递给
catch()
的同一函数中处理错误和用户更新。这意味着只有当
firebase.auth().createUserWithEmailAndPassword(电子邮件,密码)
失败时,该函数中的任何代码才会运行

从firebase文档中:

createUserWithEmailAndPassword

createUserWithEmailAndPassword(电子邮件,密码)
返回
firebase.Promise
包含非空
firebase.User

创建与指定电子邮件地址关联的新用户帐户 和密码

成功创建用户帐户后,此用户也将 已登录到您的应用程序

这意味着,成功创建用户后,您可以通过传入
then()
的回调访问新用户

你可能想要这样的东西:

var doSomethingWithNewUser = function(user) {
    // Manipulate the newly created User however you like here.
    // You don't have to sign them in again.
};

var handleCreateUserError = function(error) {
    var errorCode = error.code;
    var errorMessage = error.message;
    // Do whatever you want with the error codes.
};

firebase.auth().createUserWithEmailAndPassword(email, password)
    .then(doSomethingWithNewUser)
    .catch(handleCreateUserError);

catch()
用于错误处理……您需要在
then()
中执行此操作,而不是
catch()
好的,我是否将catch替换为then?,很抱歉,我是firebase的新手。您能帮助发布正确的格式吗?我不清楚为什么您的代码在创建用户条目后会尝试更新它们--如果用户在您的系统中注册,那么它们应该已经存在于数据库中某个位置的用户表中。。。
var doSomethingWithNewUser = function(user) {
    // Manipulate the newly created User however you like here.
    // You don't have to sign them in again.
};

var handleCreateUserError = function(error) {
    var errorCode = error.code;
    var errorMessage = error.message;
    // Do whatever you want with the error codes.
};

firebase.auth().createUserWithEmailAndPassword(email, password)
    .then(doSomethingWithNewUser)
    .catch(handleCreateUserError);