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

标签 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"
  }
}  

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

最佳答案

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

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

另请查看 the security docs了解更多信息,因为您可以使用安全规则做更多事情。

关于android - 如何在用户注册之前扫描 Firebase 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39849524/

相关文章:

java - X 不活动量后如何锁定用户?

java - Android 从自定义网络流播放视频数据?

javascript - 使用 set() 时,Firebase 不会添加完整的对象

javascript - AngularFirebase2 : Query list with equalTo

android - 我可以在不使用 android 上的 firebase 中的事件监听器的情况下获得值(value)吗?

java - 无法使用 getRef() 吗?

android - Kotlin 将参数从 fragment 传递给 ViewModel

安卓 JSONObject : Search function

node.js - 无法从 nodejs 上传到谷歌云或 firebase 存储桶

ios - 使用新的 firebase 登录后不会加载用户信息。 iOS