我有一个函数(尚未完成)应该检查用户名在我的 Firebase 数据库中是否已经存在/是否唯一。我在谷歌上搜索了如何实现这个,我已经设法得到以下内容。不幸的是,它不起作用,我什至没有得到任何 console.logs。感谢任何帮助 - 我到底做错了什么?
onChangeUsername = (event) => {
var oldError = {...this.state.error};
firebase.database().ref().child("Usernames").orderByValue().once('value', (snapshot) => {
var exists = (snapshot.val() !== null);
console.log(exists);
console.log("hello");
});
if(this.state.validation.username.unique===true)
{oldError.username = "This username is already taken"}
else if((event.nativeEvent.text.length<this.state.validation.username.min) || (event.nativeEvent.text.length>this.state.validation.username.max) )
{oldError.username = "Username should be between " + this.state.validation.username.min + " and " + this.state.validation.username.max + " characters" ;}
else oldError.username = "";
this.setState({ username: event.nativeEvent.text, error:oldError })
}
我的数据库结构如下:
Database:{ Usernames: {uid1: username1, uid2: username2}}
****问题更新 **** 在 Frank 发表评论后,我将代码更改为以下内容。它仍然不起作用,但我的他发现了一些需要修复的错误:
onChangeUsername = (event) => {
var oldError = {...this.state.error};
firebase.database().ref().child("Usernames").orderByKey().equalTo("Username1").once('value', (snapshot) => {
var exists = (snapshot.val() !== null);
console.log(exists);
console.log("hello");
});
if(this.state.validation.username.unique===true)
{oldError.username = "This username is already taken"}
else if((event.nativeEvent.text.length<this.state.validation.username.min) || (event.nativeEvent.text.length>this.state.validation.username.max) )
{oldError.username = "Username should be between " + this.state.validation.username.min + " and " + this.state.validation.username.max + " characters" ;}
else oldError.username = "";
this.setState({ username: event.nativeEvent.text, error:oldError })
}
和我的数据库如下:
Database:{ Usernames: {Username1: uid1, Username2: uid2}}
最佳答案
您在查询中缺少比较:
firebase.database().ref().child("Usernames").equalTo("Username1").orderByValue()
顺便说一句,我建议反转数据结构。如果您希望用户名是唯一的,请将它们用作父节点中的键:
Database:{
Usernames: {
Username1: uidOfUserWithUsername1,
Username2: uidOfUserWithUsername2
}
}
这样您的查找将更加简单和快速,因为您不需要查询。此外,该值现在允许您轻松查找有关声明此用户名的用户的更多信息。
关于javascript - 如何检查用户名在 Firebase 中是否唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57616310/