【问题标题】:Check Firebase database if username is already in use but in JAVA如果用户名已在使用但在 JAVA 中,请检查 Firebase 数据库
【发布时间】:2021-10-04 15:28:04
【问题描述】:

如果用户名正在被其他用户使用,我正在尝试检查用户的注册。但不幸的是,firebase 没有该选项,但他们确实有电子邮件选项,但没有用户名。我知道那可能是因为它不在用户身份验证中,而仅在数据库中,并且必须手动解决。这是我正在使用的代码。在数据库中只读取任何内容,但即使使用未使用的名称也会显示 toast 消息。即使使用使用的名称,注册也会继续有人有某种解决方案吗

    private void RegisterNow(final String username, String email, String password){
    auth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                    FirebaseDatabase.getInstance().getReference().child("MyUsers").orderByChild("username").equalTo(username).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            if (dataSnapshot.hasChild(username)){
                                Toast.makeText(RegisterActivity.this, "Username already in use please!", Toast.LENGTH_SHORT).show();
                                Intent i = new Intent(RegisterActivity.this, Login_Activity.class);
                                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                                startActivity(i);
                                finish();
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

【问题讨论】:

  • 您能否编辑您的问题以显示来自您的MyUsers 节点的数据(作为文本,请不要截图)。您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。

标签: javascript java firebase android-studio firebase-realtime-database


【解决方案1】:

您的 JSON 结构看起来像这样:

"MyUsers": {
  "someIdForUser1": {
    "username": "userNameOfUser1"
  },
  "someIdForUser2": {
    "username": "userNameOfUser2"
  }
}

如果是这样,您的支票应该是:

FirebaseDatabase.getInstance().getReference().child("MyUsers").orderByChild("username").equalTo(username).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()){ // ? check if a result exists
            Toast.makeText(RegisterActivity.this, "Username already in use please!", Toast.LENGTH_SHORT).show();
            Intent i = new Intent(RegisterActivity.this, Login_Activity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(i);
            finish();
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // ? never ignore errors
    }

请注意,如果多个用户同时注册,上述操作仍可能导致用户名重复。防止这种情况的唯一方法是有一个单独的节点,您可以在其中使用用户名作为密钥,如下所述:Firebase android : make username unique

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 2019-06-19
    相关资源
    最近更新 更多