参见英文答案 > How do you prevent duplicate user properties in Firebase? 2个
我当前的firebase系统允许我使用firebase createuser()接收电子邮件和密码来注册新用户.在oncomplete方法中,我还会使用用于注册的详细信息,以便将电子邮件和密码以及我创建的其他一些变量(如用户名和dob并使用以下代码将它们保存到firebase数据库:
// ...database code aboveDatabaseReference users = database.getReference("users"); User user = new User(username, password,dob,email); users.push().setValue(user);
>我需要立即检查,然后保存到数据库,如果用户名不是要求另一个用户名,则该用户名是唯一的
>我还实现了一个系统,当用户登录时,它检查字符串是否是电子邮件或用户名,如果用户使用电子邮件登录,那么它将使用firebase的系统登录,但如果他们使用用户名然后它必须检查firebase数据库以查看用户名是否存在,然后检查密码是否正确
我不知道如何做以上任何一项,非常感谢任何帮助.我已经使用了stackoverflow搜索并意识到有问题的帖子已经被问过了,我已经尝试了一些不起作用的解决方案,因为每个人的数据库结构都不同
解决方法:
让我关注目前的第一个问题.唯一的用户名.
在Firebase中进行更多检索的一个关键方面是构建数据.结构如何决定应用程序的功能效率.
对于唯一的用户名,我在您的Firebase数据库中建议了类似的内容.
在上面的数据库结构中,我为不可用的用户名创建了一个单独的节点(true,因为需要一些值).因此,每次我必须检查时,我都不必查看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 methodString username = editText.getText().toString().trim().toupperCase();boolean exists = doesnameExist(username);if(exists){//Show Error}else{//Continue Registration}}
希望这可以清楚地检查唯一用户名的效率.
使用这种机制,你也可以把你的逻辑放在第二个问题上.
总结以上是内存溢出为你收集整理的android – firebase重复用户名和自定义登录全部内容,希望文章能够帮你解决android – firebase重复用户名和自定义登录所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)