Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在用户注册之前扫描Firebase数据库?_Android_Firebase_Firebase Realtime Database_Firebase Security - Fatal编程技术网

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控制台中规则屏幕右上角有一个按钮。嘿,兄弟。。请也帮帮忙:请也帮帮忙: