我正在尝试将新用户添加到数据库中,但我不想有重复的用户。因此,我试图验证并确保表格中陈述的电子邮件是否与数据库中的电子邮件相同,但尽管该电子邮件已经在数据库中找到,但它仍在添加新数据。
function checkUser(){
var sFName = document.getElementById("sfname").value;
var sLName = document.getElementById("slname").value;
var sPassword = document.getElementById("spassword").value;
var sEmail = document.getElementById("semail").value;
var config = {
apiKey: "some-key",
authDomain: "some-domain.firebaseapp.com",
databaseURL: "https://some-domain.firebaseio.com",
storageBucket: "some-domain.appspot.com",
messagingSenderId: "some-id"
};
if(firebase.apps.length===0){
firebase.initializeApp(config);
var database = firebase.database();
var dbRef = database.ref('ShowOffYourTalents');
var postData = {
firstname : sFName,
lastname : sLName,
email : sEmail,
password : sPassword,
birthdate: "",
gender: "",
address: "",
interests: "",
NRIC: ""
};
dbRef.once('value',function(snapshot){
snapshot.forEach(function(childSnapshot){
var childData = childSnapshot.val();
var cEmail = childData.email;
if(sEmail == cEmail){
document.getElementById("semail").style.borderColor = "red";
document.getElementById("error_3").innerHTML = "User already exists!<br/>";
}else if (sEmail !== cEmail){
dbRef.child(sFName+' '+sLName).set(postData);
document.getElementById("response").innerHTML =
"Registered";
}
});
});
}
}
当代码执行时,它会给出"用户已存在",但它仍然会在数据库中创建新数据。
问题是您的代码遍历了 ShowOffYourTalents
下的所有子项。
据推测,每个子项对应于一个用户。if
语句测试每个用户的电子邮件,因此可以在迭代期间执行"User already exists!"
分支和"Registered"
。
相反,您可以使用查询来查找现有用户:
database.ref('ShowOffYourTalents')
.orderByChild('email')
.equalTo(sEmail)
.once(function (snapshot) {
if (snapshot.numChildren() === 0) {
console.log('User does not exist.');
} else {
console.log('User exists.');
}
});