首页 > 解决方案 > 使用规则使用户名唯一

问题描述

我正在使用 Firebase 将我的用户保存在数据库中。

现在是这样的:

在此处输入图像描述

我想通过规则使其独一无二。

规则:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

另外,我正在创建这样的用户:

private void createUser(String uname){
    Map<String,Object> newUser = new HashMap<String, Object>();
    newUser.put("uname",uname);
    DatabaseReference dbref = firedb.getReference();
    dbref.child("Users").push().setValue(newUser);
}

然后像这样调用它:

createUser(name);

因此,我想在我的数据库中强制“ Users-->uname ”的唯一性。

如何通过规则强制唯一?

编辑

我更改了我的 createUser 函数,但现在还有另一个问题。我确实喜欢这样:

    private void createUser(String uname){
        Map<String,Object> newUser = new HashMap<String, Object>();
        newUser.put("uname",uname);
        // newUser.put("soyad","soyad");
        DatabaseReference dbref = firedb.getReference();
        //dbref.child("Users").push().setValue(newUser);


        dbref.child("User").child(uname).setValue(true, new DatabaseReference.CompletionListener() {

            public void onComplete(DatabaseError error, DatabaseReference ref) {
                System.out.println("Value was set. Error = "+error);

                //Here, always working even if there is no same username

            }
        });
    }

但是,尽管我写了不同的用户名,但现在 oncomplete 总是有效。

Logcat 总是这样(如果我写相同的用户名或不同的用户名,相同的结果)

05-22 13:37:56.611 3925-3925/xxx I/System.out: Value was set. Error = null
05-22 13:38:11.551 3925-3925/xxx I/System.out: Value was set. Error = null
05-22 13:38:19.641 3925-3925/xxx I/System.out: Value was set. Error = null
05-22 13:38:44.981 3925-3925/xxx I/System.out: Value was set. Error = null
05-22 13:42:17.091 3925-3925/xxx I/System.out: Value was set. Error = null
05-22 13:42:27.741 3925-3925/xxx I/System.out: Value was set. Error = null
05-22 13:42:34.491 3925-3925/xxx I/System.out: Value was set. Error = null

最后,如何检查用户名是否存在于数据库中?

标签: javaandroidfirebasefirebase-realtime-databasefirebase-authentication

解决方案


推荐阅读