首页 文章

firebase重复用户名和自定义登录[重复]

提问于
浏览
0

这个问题在这里已有答案:

我当前的firebase系统允许我使用firebase createuser()接收电子邮件和密码来注册新用户 . 在oncomplete方法中,我还会使用用于注册的详细信息,以便将电子邮件和密码以及我创建的其他一些变量(如用户名和DOB并使用以下代码将它们保存到firebase数据库:

// ...database code above
DatabaseReference users = database.getReference("users"); 
User user = new User(username, password,DOB,email); 
users.push().setValue(user);
  • 我需要在保存到数据库之前检查用户名是否唯一,如果它不是要求另一个用户名

  • 我还实现了一个系统,当用户登录时,它检查字符串是否是电子邮件或用户名,如果用户使用电子邮件登录,那么'll use firebase'系统要登录但是如果他们使用用户名则必须检查firebase数据库以查看用户名是否存在,然后检查密码是否正确

我不知道如何做以上任何一项,非常感谢任何帮助 . 我已经使用了stackoverflow搜索并意识到有问题的帖子已经被问过了,我已经尝试了一些不起作用的解决方案因为每个人的数据库结构不同

1 回答

  • 2

    让我关注目前的第一个问题 . Unique Usernames.

    在Firebase中进行更多检索的一个关键方面是构建数据 . 结构如何决定应用程序的功能效率 .

    对于唯一的用户名,我在您的Firebase数据库中建议了类似的内容 .

    enter image description here

    在上面的数据库结构中,我为 not 可用的用户名创建了一个单独的节点(true,因为需要 some 值) . 因此,每次我必须检查时,我都不必查看 USERS 节点的其他详细信息 .

    在您的应用程序中,您可以通过这种方式使用它来存储用户名 .

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference takenNames = database.getReference("TakenUserNames");
    
    .
    .
    .
    //On Successful Registeration
    .
    takenNames.child(username).setValue(true);
    

    在注册时,您可以像这样检索该值:

    public boolean doesNameExist(final String sUsername)
        {
    theTakenNameRef = database.getReference("TakenUserName");
            theTakenNameRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if(dataSnapshot.hasChild(sUsername))
                    {
                        isTaken = true;
                    }
                    else if (!dataSnapshot.hasChild(sUsername))
                    {
                        isTaken = false;
                    }
    
                }
    
                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Toast.makeText(mContext, "Connection Error. Please try again in some time.", Toast.LENGTH_SHORT).show();
                }
            });
    
            return isTaken;
        }
    .
    .
    .
    .
    .
    .
    //Calling it in method
    String username = editText.getText().toString().trim().toUpperCase();
    boolean exists = doesNameExist(username);
    if(exists)
    {
    //Show Error
    }
    else
    {
    //Continue Registration
    }
    }
    

    希望这可以清楚地检查唯一用户名的效率 .

    使用这种机制,你也可以把你的逻辑放在第二个问题上 .

相关问题