【问题标题】:How can I verify that there are not two identical username in Firebase? [duplicate]如何验证 Firebase 中没有两个相同的用户名? [复制]
【发布时间】:2020-07-18 00:46:13
【问题描述】:

在我的应用中,我必须验证同名用户不超过两个。我用下面的代码试过了,但是当它检测到尝试注册的用户已经存在时,它会出现一个 toast,表示要更改它。

问题在于,即使您知道该名称已经存在并且虽然出现了 toast,但在创建帐户时却没有导入强加的条件,从而创建了两个具有相同用户名的用户。

如何避免创建两个同名用户?

regBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                regBtn.setVisibility(View.INVISIBLE);
                loadingProgress.setVisibility(View.VISIBLE);
                final String email = userEmail.getText().toString();
                final String password = userPassword.getText().toString();
                final String password2 = userPAssword2.getText().toString();
                final String name = userName.getText().toString();


                if(verificationUsername(name)){
                    showMessage("ass");
                    regBtn.setVisibility(View.VISIBLE);
                    loadingProgress.setVisibility(View.INVISIBLE);
                } 

 public boolean verificationUsername (String equalto){

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
        Query query = reference.child("Users").orderByChild("username").equalTo(equalto);
        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String TypeUser = dataSnapshot.child("username").getValue().toString();
                if (dataSnapshot.exists()) {
                    System.out.println(TypeUser + "dssssssssssssssssssssssssddddddsssssssssssssssssssssss");
                    lola = dataSnapshot.toString();
                    showMessage("El nombre de usuario ya esta en uso, intenta con uno nuevo");

                    // dataSnapshot is the "issue" node with all children with id 0
                    for (DataSnapshot issue : dataSnapshot.getChildren()) {
                        // do something with the individual "issues"
                    }
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        return false;
    }

【问题讨论】:

  • 你使用哪种认证方式?
  • 使用 Firebase 身份验证

标签: java android firebase firebase-realtime-database


【解决方案1】:

首先,我建议您将所有句子的 usernameUpperCase 存储为大写,因为 Firebase Realtime 区分大小写。

因此,数据库示例如下所示:

用户名:Ticherhaz
用户名大写:TICHERHAZ

我更喜欢使用addListenerForSingleValueEvent,因为我们只想阅读一次。

 public boolean verificationUsername (String equalto){
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    Query query = reference.child("Users").orderByChild("usernameUpperCase").equalTo(equalto.toUpperCase());
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) { 
               //that's mean this username already exist
            }
          else {
               //so username not exist yet, we create here new username.
          }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });
    return false;
}

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 2017-01-04
    • 2019-12-15
    相关资源
    最近更新 更多