如何在用户注册之前扫描Firebase数据库?

时间:2016-10-04 10:06:07

标签: android firebase firebase-realtime-database firebase-security

我想在注册用户时扫描数据库,以检查用户是否有某个用户名'可以使用或采取。我尝试使用此代码:

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

在做了一些研究之后,我找到了这个答案:Firebase Permission denied Error

目前的安全规则:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}  

虽然它解决了这个问题,但这个解决方案可能在测试阶段很方便,但在发布应用程序时会怎样?请告诉我。

2 个答案:

答案 0 :(得分:3)

对于这种情况,您可以简单地扩展当前规则,让每个人都可以读取您的用户名:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    "unique-usernames": {
        ".read": true
    }
  }
} 

另请查看the security docs以获取更多信息,因为您可以使用安全规则执行更多操作。

答案 1 :(得分:0)

在Firebase中,最好的方法是授权使用Firebase Authentication以及获取用户列表,以便在用户使用Firebase Realtime Database成功注册用户时维护数据库。您无法仅使用Firebase Realtime Database

维护授权用户列表