【问题标题】:Firebase Web Database to Receiveing DataFirebase Web 数据库接收数据
【发布时间】:2018-03-14 17:08:27
【问题描述】:

我目前正在从事一个项目,并且正处于注册表单的阶段。我正在使用 Firebase 进行数据库和身份验证。目前我可以让用户使用电子邮件和密码注册并登录我的应用程序。但是,当他们单击注册按钮时,我目前正在尝试将用户信息存储到我的数据库中。

这是我的 JS 代码:

//Sign up
function signup(){
  var userEmail = document.getElementById("txtEmail").value; //Email input value
  var userPassword = document.getElementById("txtPassword").value; //Password input value
  var user = firebase.auth().currentUser; //Current user


  <!--Sign up user to app-->
  firebase.auth().createUserWithEmailAndPassword(userEmail, userPassword).then(function(user) {
      logUser(user); // call logUser Function if successful
  }, function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      window.alert("Error: " + error.message);
  });

  function logUser(user) {
      var ref = firebase.database().ref("users"); //database ref
      var obj = {
          "user": user.uid,     //users data to be entered
          "email": user.email
          };
      ref.push(obj);
  }

  //if email is not null redirect page.
  if(userEmail != ''){
      <!----Loads Sign up page according to select drop down list---------->
      var doc = document.getElementById('selectMenu');
      location = doc.options[doc.selectedIndex].value;
      }
  }

在我的网站上,用户可以注册为两种不同类型的用户。在他们注册之前,他们使用列表选择他们想要注册的用户类型。在他们填写完必填字段并单击注册按钮后,根据在选择列表中选择的选项,他们将被重定向到完整的注册表单,并在其中填写更多详细信息。

页面重定向由最后一个 if 语句处理:

//if email is not null redirect page.
  if(userEmail != ''){
      <!----Loads Sign up page according to select drop down list---------->
      var doc = document.getElementById('selectMenu');
      location = doc.options[doc.selectedIndex].value;
      }
  }

如果没有这个 if 语句,数据会很好地写入数据库,但无论我将它放在 signup() 函数中的哪个位置,它都会阻止数据写入数据库。我只是不明白为什么。谁能帮忙看看问题?如果您需要更多详细信息,请告诉我。

谢谢。

【问题讨论】:

  • signUp() 内部的函数由于异步调用而无需等待将数据保存到 firebase 即可重定向页面。应该有一个同步功能,用于保存邮件,然后检查它是否为空。
  • 该函数之外还有一个函数可以检查电子邮件和密码字是否不为空。我把那个 if 语句放在那里进行测试,我应该在发布这篇文章之前把它拿出来。即使我将位置更改代码行放在 logUser() 函数中,它仍然会阻止代码写入数据库。有什么建议吗?
  • 是否要将详细信息保存到firebase,然后重定向到另一个页面
  • 是的。 :)

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


【解决方案1】:

创建推送函数成功或错误后提供的回调,然后在回调中传递重定向代码行。因为代码将同步,并且在将数据推送到 Firebase 后会触发。

function logUser(user) {
    var ref = firebase.database().ref("users"); //database ref
    var obj = {
          "user": user.uid,     //users data to be entered
          "email": user.email
          };
    ref.push(obj, () => {
        if(user.email != ''){
            <!----Loads Sign up page according to select drop down list---------->
            var doc = document.getElementById('selectMenu');
            location = doc.options[doc.selectedIndex].value;
        }
    });
}

或者你可以返回promise来同步then里面的重定向代码

let logUser = function(user){
    return new Promise((resolve, reject) => {
        var ref = firebase.database().ref("users"); //database ref
        var obj = {
              "user": user.uid,     //users data to be entered
              "email": user.email
        };
        ref.push(obj);
    });
};

logUser.then(() => {
    if(user.email != ''){
        <!----Loads Sign up page according to select drop down list---------->
        var doc = document.getElementById('selectMenu');
        location = doc.options[doc.selectedIndex].value;
    }
})

【讨论】:

  • 完美运行,非常感谢。真的帮了大忙。 (我已经标记了你的答案,但它没有显示)。
  • 您不能标记您可以使用向下标记下方的右勾号接受它。看看接受answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 2018-07-13
相关资源
最近更新 更多