创建Firebase用户并将数据同时添加到数据库中

时间:2019-02-03 15:58:36

标签: javascript firebase firebase-realtime-database firebase-authentication

我想让我的创建用户在我从Firebase注册时通过其用户uid添加到数据库中。

当前我的代码正在运行,只是我不明白为什么将数据保存到我的Firebase中时,名称(假定是创建的用户uid)显示为“ undefined”。但是抓取并保存的数据是正确的。

我的firebase数据库显示未定义:https://imgur.com/ATRsmKe

我要保存和创建用户的JS代码:

/*Show Login User*/

// Firebase Variables
var auth = firebase.auth();

$(document).ready(function () {

  //Pass parameter from form to Firebase
  $('.addpic').on('submit', event => {
    event.preventDefault();
    const name = $('#name').val();
    const hp = $('#hp').val();
    const email = $('#email').val();
    const password = $('#password').val();
    const role = $('#role').val();

    //Firebase user authentication
    firebase.auth().createUserWithEmailAndPassword(email, password)
      .then(user => {

        //set data into User database
        firebase.database().ref('Admin/Person In Charge' + "/" + user.uid).set({
          Name: name,
          ContactNo: hp,
          Email: email,
          Password: password,
          Role: role
        }).then(success => {
          console.log(user);
          window.alert("Registered");
          window.location = "user.html";
        });
      })
      .catch(function (error) {

        var errorCode = error.code;
        var errorMessage = error.message;

        window.alert("Error : " + errorMessage);
      });
  });
});

我希望将数据保存在创建用户的UID下。我尝试了所有可能的解决方案,但没有一个对我有用。

1 个答案:

答案 0 :(得分:1)

您应该看看return type of createUserWithEmailAndPassword。如果我正确阅读了文档,它将返回firebase.auth.UserCredential的实例,而不是实际用户。我认为您实际上需要在该凭证对象中再深入一层并获得user.uid

示例

firebase.auth().createUserWithEmailAndPassword(email, password)
  .then(userCredential => {

    //set data into User database
    firebase.database().ref('Admin/Person In Charge' + "/" + userCredential.user.uid).set({
      Name: name,
      ContactNo: hp,
      Email: email,
      Password: password,
      Role: role
    }).then(success => {
      console.log(user);
      window.alert("Registered");
      window.location = "user.html";
    });
  })

您将来可以通过user检查thenconsole.log()的值来解决这个问题。