java - 如何使用来自 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;
}
}
我怎样才能做到这一点?
解决方案
使用 firebase 数据库创建自己的身份验证系统不是一个好主意。您想要做的将要求您允许读取存储在数据库中的每个用户的电子邮件密码。这对您的应用程序来说将是一个巨大的安全风险,因为任何人都可以读取您数据库中的所有电子邮件密码。
Firebase 提供了易于使用的 Firebase 身份验证,并提供了许多可供使用的选项。您可以轻松地将安全性委托给 firebase auth 并将用户的配置文件和数据存储在 db 中。通过这种方式,您还可以限制每个用户的数据访问(这就是您需要电子邮件密码登录您的应用程序的原因)。
firebase的认证文件请看:https ://firebase.google.com/docs/auth
它将帮助您在不实现自己的身份验证的情况下创建应用程序,并专注于实际功能开发。
推荐阅读
- visual-studio-code - 更改 Visual Studio Code 上的缩进括号样式
- java - Android 上可用的所有“✔️”字符类型有哪些?(对于文本视图)
- c++ - 在用户给出的区间之间查找阿姆斯壮数的程序出错
- django - Django:get_or_create() 和 FileField
- scala - 将参数注入类时,何时应将参数声明为 val?
- javascript - 如何在 Angular 中使用 JSON.parse 在新行中返回多个结果?
- sql - 如何选择多列并按一列分组
- sql - 使用 NULL 值合并语法
- java - 是tomcat = apache(或其他网络服务器)+ JavaEE?
- reactjs - 如何在反应日期时间范围选择器中清除选定的日期时间?