我想做的是
我有一个firebase节点,如下所示:
我的用户将输入一个字符串(name),然后我将通过以下代码检查(name)或(userinput)在firebase中是否可用
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("users");
ref.orderByChild("username").equalTo(userinputname).addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
if(dataSnapshot.exists()) {
//username exist
Toast.makeText(LoginActivity.this, "exists", Toast.LENGTH_SHORT).show();
}
}
如果它可用,那么我想从(名称)所在的特定节点获取其他数据。
简化-我的用户将输入一个用户名和密码,我有多个用户名和密码在我的数据库中,所以我想首先检查用户名是否存在于数据库中,如果是,那么我想让数据库中的密码与用户登录时输入的密码相匹配
例如,如果我的用户输入数据库中可用的用户名“Admin”,那么我想获取节点“Admin 123”中的通行证,然后我将检查数据库中的通行证是否与用户输入的通行证匹配,以便将其登录到应用程序中
1条答案
按热度按时间35g0bw711#
如果我的用户输入数据库中可用的用户名“Admin”,我希望获得该节点中的通行证,即“Admin 123”,然后我将检查数据库中的通行证是否与用户输入的通行证匹配,以便将其登录到应用程序中。
要解决此问题,首先必须执行一个查询,以获取
username
字段的值与用户在userinputname
EditText中键入的内容相匹配的所有用户。如果查询至少返回一条记录,则必须根据userinputpass
EditText值检查pass
字段的值。如果存在匹配项,您可以继续进行身份验证,或者显示一条消息,或者执行任何您希望的操作。在上面的解决方案中,我使用了Query#get()而不是Query()#addListenerForSingleValueEvent()。为什么?是因为this。
虽然上面的解决方案可行,但请注意,您应该永远以您的方式存储用户凭据。永远不要!以明文存储密码是您可能给用户带来的最严重的安全风险之一。因此,为了避免这种情况,我强烈建议您实现Firebase Authentication。
由于您使用的是Java,我建议您阅读以下文章:
如果您考虑在某个时间点学习Kotlin,这是我个人推荐的,那么也请查看以下资源:
还有:
编辑:
上面的查询需要一个索引。因此为了使它工作,请在您的Firebase控制台中添加以下规则: