当前位置: 首页 > 知识库问答 >
问题:

如何将Firebase数据与登录身份验证屏幕输入进行比较。安卓系统

郭云
2023-03-14

所以我正在做登录功能,我需要比较我存储在Firebase中的数据和我在登录屏幕中给出的输入,所以用户可以登录,如果他在系统中注册了,现在它只对来自“Customer”的第一个特定子项起作用,但我需要它与所有的用户一起工作,所以当我要添加其他用户时,它也可以识别他们。它应该与数据库中的这3个字段(电子邮件、密码、活动)进行比较。

[数据库]https://imgur.com/a/kl8as3p

public class LoginScreen extends AppCompatActivity {
    private FirebaseAuth mAuth;
    private DatabaseReference mDatabase;
    EditText email;
    EditText password;
    String username, pass, isActivate;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        mAuth = FirebaseAuth.getInstance();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_screen);

        email = findViewById(R.id.email_signin);
        password = findViewById(R.id.passwordSignin);

        mDatabase= FirebaseDatabase.getInstance().getReference().child("Customer").child("1");
        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                username = dataSnapshot.child("email").getValue().toString();
                pass = dataSnapshot.child("password").getValue().toString();
                isActivate = dataSnapshot.child("active").getValue().toString();

            }

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

            }
        });
    }

    public void backClick(View view) {
        super.onBackPressed();
    }

    public void signIn(View view) {
        if(allowedToSignin()){
            Intent intent = new Intent(this, CustomerScreen.class);
            startActivity(intent);
        }
        else {
            Toast.makeText(LoginScreen.this,"Login failed!", Toast.LENGTH_LONG).show();

        }

    }

    public boolean allowedToSignin(){
        boolean signinAllowed = true;

        if(email.getText().toString().equals(username) && isActivate.equals("true")){
            email.setError(null);
        }else {
            email.setError("enter a valid email");
            signinAllowed = false;
        }
        if (password.getText().toString().equals(pass)){
            password.setError(null);
        }else {
            password.setError("enter a valid password");
            signinAllowed = false;
        }
        return signinAllowed;

    }
}```


  [1]: https://i.stack.imgur.com/QvOla.png

共有1个答案

郑博
2023-03-14

我会反过来做。

1.让用户使用Firebase Auth signin方法登录。

2.使用`userid=mauth.getCurrentUserid()`获取用户ID

3.在数据库中使用这个用户ID来检查用户是否“活动”,如果没有自动签出用户并在UI上抛出错误。

这意味着在数据库中,userdata将位于mdatabase=firebasedatabase.getInstance().getReference().child(“customer”).child(userId);

 类似资料:
  • 使用,https://github.com/firebase/FirebaseUI-Android/tree/master/codelabs/chat作为登录的参考,我在键入时似乎遇到了问题 我只能键入Auth的提供者,而不能键入,为什么会这样,它提示我键入社会提供者。

  • 我试图用注册时使用的凭证登录。Firebase已经有注册用户的条目。每次我试图登录它显示“登录不成功”,我没有看到任何代码问题。请帮帮忙。

  • 当使用Firebase身份验证匿名帐户时,它偶尔会在系统中创建一个新的用户ID,有时它会使用相同的用户ID。我真的希望每次都能创建相同的用户ID,这样匿名用户仍然可以在应用程序中维护相同的进度/数据。这实际上是我开始使用Firebase的原因。即使在重新启动应用程序等之后,我如何始终维护一个匿名帐户来保持相同的用户ID? 我希望用户每次以访客身份玩游戏时都能获得相同的ID。我看到有些应用程序在卸载

  • 本文向大家介绍firebase-authentication Google Plus登录身份验证,包括了firebase-authentication Google Plus登录身份验证的使用技巧和注意事项,需要的朋友参考一下 示例 使用Plus登录验证用户 onCreate onStart() 获取资料信息 使用Firebase进行身份验证, onActivityResult 登出      

  • 所以我正在尝试在Eclipse中制作一个简单的聊天信使。目前,我对如何将用户登录详细信息与存储在数据库表中的详细信息进行比较感到困惑。我有一个“askName()”方法,它接受用户名和密码,这需要使用我的“身份验证”方法来检查存储在数据库登录表中的详细信息。 我一直在这里和网上搜索,找到了很多有用的代码来获取想法。然而,我已经有一段时间一直在思考这个问题,我对编程还是很陌生,如果有任何帮助,我将不

  • 大家好,我对FireBase创建用户和注册用户有问题。下面是注册和登录的代码。我得到空指针异常,无法理解原因。。初始化完成了,但经过了这么多天的努力,还是弄不明白。 注册: 正在发布注册活动的日志错误: java.lang.com.google.android.gms.internal.zzdvv.zzb(未知来源)在com.google.android.gms.internal.zzdwc.zz