Firebase Web应用程序-创建新帐户时无法获取user.uid

时间:2018-07-08 20:28:03

标签: javascript jquery firebase firebase-realtime-database

我正在开发一个小型Web应用程序,但遇到了我似乎无法克服的障碍。我可以注册一个新帐户,但是我想在注册后立即将其他数据保存到数据库中。

这就是我有信心可以正常工作的。

$("#user-sign-up-button").click(function(){


  var firstName = $("#new-user-first-name").val();
  var secondName = $("#new-user-surname").val();
  var charity = $("#new-user-charity-account").val();
  var userEmail = $("#new-user-email").val();
  var userPassword = $("#new-user-password").val();
  var secondPassword = $("#new-user-repeated").val();

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


});

现在有关将其他变量保存到数据库的问题,我已经在createuserWithEmailAndPassword的.then部分中尝试了以下两种方法。

.then(
    function(user){
      var root = firebase.database().ref();
      var uid = user.uid;
      alert(uid);
      var postData = {  firstName: first_name,
        secondName: second_name,
        email: user_email,
        isCharity: charity };
        root.child("users").child(uid).set(postData);
    }

    function writeUserData(first_name, second_name, charity, user_email) {
      firebase.database().ref('users/' + user.uid).set({
        firstName: first_name,
        secondName: second_name,
        email: user_email,
        isCharity: charity
    });
  )

以上两种解决方案都可以在onAuthStateChanged中使用,但是我想在注册时捕获数据,而不是每次有人登录时都捕获。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

您必须使用.onAuthStateChanged才能到达firebase.auth().currentUser。它是异步的,在解决之前将为空/ null。另外,请不要忘记,新的基于电子邮件的帐户在单击验证电子邮件链接之前将不会.emailValidated:true。 ...一些需要考虑的东西。