您好我使用的是firebase和javascript。当新用户注册时,我需要检查是否存在电子邮件ID。此代码适用于用户名或ID,但显示将电子邮件作为记录的错误。我不想为每条记录覆盖firebase唯一密钥生成。
var ref = new Firebase("https://kkk.firebaseio.com/");
var users = ref.child("users");
var userId = document.getElementById("email").value;
function checking()
{
checkIfUserExists(userId);
}
function userExistsCallback(userId, exists) {
if (exists) {
alert('user ' + userId + ' exists!');
} else {
alert('user ' + userId + ' does not exist!');
var check = users.push({ email: username});
}
}
function checkIfUserExists(userId) {
users.child(userId).once('value', function(snapshot) {
var exists = (snapshot.val() !== null);
userExistsCallback(userId, exists);
});
}
我输入电子邮件时收到此错误。
Error: Firebase.child failed: First argument was an invalid path: "anu@gmail.com". Paths must be non-empty strings and can't contain ".", "#", "$", "[", or "]"
我希望firebase中的数据看起来像这样,
users:{
"ksjhfsjkbv67dsjhbcxcscdg":{
"email": "sdfs@gmail.com"
},
"kXdhbrurjw9974jjdsos_asd":{
"email": "anu@gmail.com"
},
...
有人可以帮助我吗?
答案 0 :(得分:2)
如果你在firebase中的数据有唯一键,那么它可能看起来像:
{
users:{
"dsjhfsjkbv67dsjhbcxcscdg":{
"email": "blah@whatever.com"
},
"sXdhbrurjw9974jjdsos_asd":{
"email": "anu@gmail.com"
},
...
}
}
您得到的错误是因为您不能将非法字符作为数据的“键”,所以:
{
"anu@gmail.com": "email"
}
是不可接受的,因此错误:
Error: Firebase.child failed: First argument was an invalid path: "anu@gmail.com". Paths must be non-empty strings and can't contain ".", "#", "$", "[", or "]"
“。”是不允许的。
如果您不知道唯一键,检查您的值是否存在的一种方法是执行以下操作:
users.once('value', function(snapshot) {
var exists = false;
snapshot.forEach(function(childSnapshot){
if(userId === childSnapshot.val().email){
exists = true;
}
})
userExistsCallback(userId, exists);
});
您可以在这里阅读有关每个功能的更多信息:
https://www.firebase.com/docs/web/api/datasnapshot/foreach.html
答案 1 :(得分:0)
我认为您不必检查电子邮件是否已经有一个帐户,因为Firebase无法使用该电子邮件创建另一个帐户。