Android 如何在用户注册之前扫描Firebase数据库?
我想在注册用户时扫描数据库,检查某个“用户名”是否可用。我使用以下代码进行了尝试:Android 如何在用户注册之前扫描Firebase数据库?,android,firebase,firebase-realtime-database,firebase-security,Android,Firebase,Firebase Realtime Database,Firebase Security,我想在注册用户时扫描数据库,检查某个“用户名”是否可用。我使用以下代码进行了尝试: mDatabase.child("usernames").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) {
mDatabase.child("usernames").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
if (dataSnapshot.getValue() == uniqueUserName.getText().toString()) {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "Username already taken", Snackbar.LENGTH_SHORT);
snackbar.show();
} else {
signingUpMethod();
}
} else {
signingUpMethod();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
但我得到了这个日志:
W/SyncTree: Listen at /unique-usernames failed: DatabaseError: Permission denied
在做了一些研究之后,我发现了这个答案:
现行安全规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
虽然它解决了这个问题,但这个解决方案在测试阶段可能很方便,但在发布应用程序时该怎么办呢?请让我知道。在Firebase中,最好的方法是授权使用和获取用户列表。当用户成功使用its注册时,您必须维护您的数据库。您不能仅使用来维护授权用户列表。在这种情况下,您只需扩展当前规则,让每个人都可以读取您的用户名,如下所示:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"unique-usernames": {
".read": true
}
}
}
另外,请查看更多信息,因为您可以对安全规则进行更多操作。您可以将当前的安全规则添加到您的问题中吗?@AndréKool嘿,请查看编辑后的问题。嗯。。。那么,出于安全目的,这样做安全吗?是的,如果人们还没有通过身份验证,他们只能读取“唯一用户名”下的内容,他们将无法读取dtabse中的任何其他内容。此外,因为没有写入规则,所以在未经身份验证的情况下,它们将无法更改任何内容。我还建议您花些时间阅读文档,看看您使用安全规则的可能性。@HammadNasir您也可以在模拟器中测试您的规则,firebase控制台中规则屏幕右上角有一个按钮。嘿,兄弟。。请也帮帮忙:请也帮帮忙: