首页 > 解决方案 > 如何使用来自 Firebase 实时数据库的电子邮件检索数据?

问题描述

我有一个来自 firebase 的数据库。我想使用用户的电子邮件检索一些数据。假设用户输入他/她的电子邮件,如果电子邮件存在于 firebase 数据库中,那么它会显示他/她的用户名和密码。我没有使用 firebase 身份验证,我使用的是 firebase 实时数据库。这是我的数据库结构: 数据库结构

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_forgate_password);

    emailf = findViewById(R.id.emailf);
    userf = findViewById(R.id.usernamef);
    passwordf = findViewById(R.id.passwordf);

    ok = findViewById(R.id.okbtn);

    database = FirebaseDatabase.getInstance();
    users = database.getReference("Users").child("emailAddress");

    ok.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            signInMethod(emailf.getText().toString());
        }
    });
}

private void signInMethod(final String email) {

    users.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.
            if (dataSnapshot.child("emailAddress").exists()){
                if (dataSnapshot.child(user.getUserName()).exists()){
                    Toast.makeText(ForgatePassword.this,"User already exists",Toast.LENGTH_LONG).show();
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.w("Tag", "Email not exists", error.toException());
        }
    });
}

这是我的模型类: public class SignInUpModel {

private String fullName;
private String userName;
private String schoolName;
private String className;
private String division;
private String phnNumber;
private String emailAddress;
private String reference;
private String password;

public SignInUpModel() {

}

public SignInUpModel(String fullName, String userName, String schoolName, String className, String division, String phnNumber, String emailAddress, String reference, String password) {
    this.fullName = fullName;
    this.userName = userName;
    this.schoolName = schoolName;
    this.className = className;
    this.division = division;
    this.phnNumber = phnNumber;
    this.emailAddress = emailAddress;
    this.reference = reference;
    this.password = password;
}

public String getFullName() {
    return fullName;
}

public void setFullName(String fullName) {
    this.fullName = fullName;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getSchoolName() {
    return schoolName;
}

public void setSchoolName(String schoolName) {
    this.schoolName = schoolName;
}

public String getClassName() {
    return className;
}

public void setClassName(String className) {
    this.className = className;
}

public String getDivision() {
    return division;
}

public void setDivision(String division) {
    this.division = division;
}

public String getPhnNumber() {
    return phnNumber;
}

public void setPhnNumber(String phnNumber) {
    this.phnNumber = phnNumber;
}

public String getEmailAddress() {
    return emailAddress;
}

public void setEmailAddress(String emailAddress) {
    this.emailAddress = emailAddress;
}

public String getReference() {
    return reference;
}

public void setReference(String reference) {
    this.reference = reference;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

}

我怎样才能做到这一点?

标签: javaandroidfirebase-realtime-database

解决方案


使用 firebase 数据库创建自己的身份验证系统不是一个好主意。您想要做的将要求您允许读取存储在数据库中的每个用户的电子邮件密码。这对您的应用程序来说将是一个巨大的安全风险,因为任何人都可以读取您数据库中的所有电子邮件密码。

Firebase 提供了易于使用的 Firebase 身份验证,并提供了许多可供使用的选项。您可以轻松地将安全性委托给 firebase auth 并将用户的配置文件和数据存储在 db 中。通过这种方式,您还可以限制每个用户的数据访问(这就是您需要电子邮件密码登录您的应用程序的原因)。

firebase的认证文件请看:https ://firebase.google.com/docs/auth

它将帮助您在不实现自己的身份验证的情况下创建应用程序,并专注于实际功能开发。


推荐阅读