我有一个'创建帐户'我的反应应用程序中的组件 - 如果我只使用auth.createUserWithEmailAndPassword
函数,我可以创建一个帐户,但我决定我希望用户也拥有一个用户名。我的逻辑是
user_profile
,其属性为username
username
我正在寻找,请返回true
并告诉用户username
已被占用。在MySQL
我会做这样的事情:SELECT id FROM user_profiles WHERE username = $username;
- >这将使用' id'返回结果集。包含特定用户名的行的行,如果没有找到具有用户名的行,则返回null / empty / etc。
如果FB用户通过身份验证,那么我可以使用它:
firebase
.database()
.ref(userProfilesDatabase)
.orderByChild('username')
.equalTo('someusername')
.once('value')
.then(function(snapshot) {
var username = snapshot.val().username;
console.log(snapshot.val());
});
由于我的安全规则/权限被拒绝,上面的调用将无法正常工作,它还会检索包含所有数据的整个对象,从而公开我不想向尚未公开的用户公开的user_profile
数据创建一个帐户 - 我只想在用户名存在/不存在的情况下拥有true
或false
。
我当前的数据库架构看起来像这样(JSON
格式,但希望很清楚),其中' user_profiles'是表名,内部的每个对象都是user_profile的ID,对应于包含我需要检查的用户名的对象以及其他属性:
user_profiles
8jgEZxuO7rbQAc8j8GdwIRgeqGG3
age: 25
username: someusername
37ffEZsd338j8GdwIRgdfsDFreER
age: 25
username: anotherusername
....
我的安全规则看起来像这样,我不知道如何向表中添加特定规则 - 文档似乎散落在各处并且难以理解:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}