【发布时间】: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