【发布时间】:2020-07-26 08:21:29
【问题描述】:
问题在于忘记密码重置电子邮件。我首先检查了电子邮件是否存在于firebase中,而没有编写用于发送重置邮件的代码。然后我编写了重置代码邮件,它在以无效用户异常运行应用程序时显示Toastmessage。没有这样的记录。
package com.example.loginapp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_forgot_password);
mAuth=FirebaseAuth.getInstance();
forgotenteredmail=findViewById(R.id.forgotenteredmail);
forgotnextbutton=findViewById(R.id.forgotnextbutton);
mAuth=FirebaseAuth.getInstance();
forgotnextbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!validateemail() )
{
return;
}
else
{
isUser();
}
}
});
}
private Boolean validateemail ()
{
String val=forgotenteredmail.getEditText().getText().toString();
if(val.isEmpty()){
forgotenteredmail.setError("The Field Cannot be Empty");
return false;
}
else{
forgotenteredmail.setError(null);
forgotenteredmail.setErrorEnabled(false);
return true;
}
}
private void isUser() {
email = forgotenteredmail.getEditText().getText().toString().trim();
rootnode = FirebaseDatabase.getInstance();
reference = rootnode.getReference("users");
final Query checkuser = reference.orderByChild("email").equalTo(email);
checkuser.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
forgotenteredmail.setError(null);
forgotenteredmail.setErrorEnabled(false);
resetUserPassword(email);
} else {
forgotenteredmail.setError("User does not Exist");
forgotenteredmail.requestFocus();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
public void resetUserPassword(String email){
final ProgressDialog progressDialog = new ProgressDialog(forgotPassword.this);
progressDialog.setMessage("verifying..");
progressDialog.show();
mAuth.sendPasswordResetEmail(email)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), "Reset password instructions has sent to your email",
Toast.LENGTH_SHORT).show();
}else{
progressDialog.dismiss();
Toast.makeText(getApplicationContext(),
"Email don't exist", Toast.LENGTH_SHORT).show();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
});}
}
发送重置邮件时出现问题
firebase 数据库
- **-appname**
**-users**
-username
-name:
-email
-username[enter image description here][1]
-passs
-phone
-username
-name
{
"rules": {
".read": true,
".write": true,
"users":{
".indexOn":"email"
}
}
}
【问题讨论】:
-
您分享的代码中的哪一行显示了确切的错误?
-
@FrankvanPuffelen 在调试时没有显示任何错误,但在运行应用程序时,检查电子邮件是否存在显示 Invalid user exception as toast 消息
-
您可以记录它,然后将 logcat 输出中的确切消息(和任何堆栈跟踪)复制粘贴到您的问题中(下面有一个编辑链接),而不是将该消息显示为祝酒词?
-
PersistentConnection: pc_0 - 使用未指定的索引。您的数据将在客户端下载和过滤。考虑将 '".indexOn": "email"' at users 添加到您的安全和 Firebase 数据库规则中以获得更好的性能:@FrankvanPuffelen
-
java.lang.NullPointerException: 尝试调用虚拟方法 'com.google.android.gms.tasks.Task com.google.firebase.auth.FirebaseAuth.sendPasswordResetEmail(java.lang.String)'在 com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@19.3) 的 com.example.loginapp.forgotPassword$2.onDataChange(forgotPassword.java:105) 的空对象引用上。 0:179) 在 com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.3.0:75) @FrankvanPuffelen
标签: java android firebase-realtime-database firebase-authentication