在许多应用程序中,我们都有使用电子邮件和密码登录的功能。有时,我们忘记了密码,大多数情况下会重设密码。在这里,我们将实现相同的功能,以使用Firebase身份验证重置密码。您可以参考以下文章,在Android中使用Firebase进行用户身份验证。下面提供了一个示例视频,以使您对我们在本文中将要做的事情有个大概的了解。注意,我们将使用Java语言实现该项目。
分步实施
步骤1:使用UI部件
转到activity_login.xml文件,并参考以下代码。以下是activity_login.xml文件的代码。
XML
Java
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class LoginActivity extends AppCompatActivity {
private EditText memail;
private EditText mpass;
private FirebaseAuth mAuth;
private Toolbar mtoolbar;
private Button login;
TextView forgetpass;
public ProgressDialog loginprogress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mtoolbar=(Toolbar)findViewById(R.id.login_toolbar);
setSupportActionBar(mtoolbar);
mAuth = FirebaseAuth.getInstance();
getSupportActionBar().setTitle("Login");
forgetpass=findViewById(R.id.forgetpass);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
loginprogress=new ProgressDialog(this);
memail=(EditText)findViewById(R.id.logemail);
mpass=(EditText)findViewById(R.id.logpass);
// click on forget password text
forgetpass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showRecoverPasswordDialog();
}
});
login=(Button)findViewById(R.id.logbut);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email=memail.getText().toString();
String password =mpass.getText().toString();
if(!TextUtils.isEmpty(email)||!TextUtils.isEmpty(password)){
loginprogress.setTitle("Logging In");
loginprogress.setMessage("Please Wait ");
loginprogress.setCanceledOnTouchOutside(false);
loginprogress.show();
loginUser(email,password);
}
}
});
}
ProgressDialog loadingBar;
private void showRecoverPasswordDialog() {
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("Recover Password");
LinearLayout linearLayout=new LinearLayout(this);
final EditText emailet= new EditText(this);
// write the email using which you registered
emailet.setText("Email");
emailet.setMinEms(16);
emailet.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
linearLayout.addView(emailet);
linearLayout.setPadding(10,10,10,10);
builder.setView(linearLayout);
// Click on Recover and a email will be sent to your registered email id
builder.setPositiveButton("Recover", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String emaill=emailet.getText().toString().trim();
beginRecovery(emaill);
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
private void beginRecovery(String emaill) {
loadingBar=new ProgressDialog(this);
loadingBar.setMessage("Sending Email....");
loadingBar.setCanceledOnTouchOutside(false);
loadingBar.show();
// calling sendPasswordResetEmail
// open your email and write the new
// password and then you can login
mAuth.sendPasswordResetEmail(emaill).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
loadingBar.dismiss();
if(task.isSuccessful())
{
// if isSuccessful then done messgae will be shown
// and you can change the password
Toast.makeText(LoginActivity.this,"Done sent",Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(LoginActivity.this,"Error Occured",Toast.LENGTH_LONG).show();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
loadingBar.dismiss();
Toast.makeText(LoginActivity.this,"Error Failed",Toast.LENGTH_LONG).show();
}
});
}
public void loginUser(String email,String password){
mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if(task.isSuccessful()){
loginprogress.dismiss();
Intent mainIntent = new Intent(LoginActivity.this,MainActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mainIntent);
finish();
} else {
loginprogress.hide();
Toast.makeText(LoginActivity.this,"Cannot Sign In..Plaese Try Again",Toast.LENGTH_LONG);
}
}
});
}
}
步骤2:使用LoginActivity。 Java文件
转到LoginActivity。 Java文件并参考以下代码。下面是LoginActivity的代码。 Java文件
Java
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class LoginActivity extends AppCompatActivity {
private EditText memail;
private EditText mpass;
private FirebaseAuth mAuth;
private Toolbar mtoolbar;
private Button login;
TextView forgetpass;
public ProgressDialog loginprogress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mtoolbar=(Toolbar)findViewById(R.id.login_toolbar);
setSupportActionBar(mtoolbar);
mAuth = FirebaseAuth.getInstance();
getSupportActionBar().setTitle("Login");
forgetpass=findViewById(R.id.forgetpass);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
loginprogress=new ProgressDialog(this);
memail=(EditText)findViewById(R.id.logemail);
mpass=(EditText)findViewById(R.id.logpass);
// click on forget password text
forgetpass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showRecoverPasswordDialog();
}
});
login=(Button)findViewById(R.id.logbut);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email=memail.getText().toString();
String password =mpass.getText().toString();
if(!TextUtils.isEmpty(email)||!TextUtils.isEmpty(password)){
loginprogress.setTitle("Logging In");
loginprogress.setMessage("Please Wait ");
loginprogress.setCanceledOnTouchOutside(false);
loginprogress.show();
loginUser(email,password);
}
}
});
}
ProgressDialog loadingBar;
private void showRecoverPasswordDialog() {
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("Recover Password");
LinearLayout linearLayout=new LinearLayout(this);
final EditText emailet= new EditText(this);
// write the email using which you registered
emailet.setText("Email");
emailet.setMinEms(16);
emailet.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
linearLayout.addView(emailet);
linearLayout.setPadding(10,10,10,10);
builder.setView(linearLayout);
// Click on Recover and a email will be sent to your registered email id
builder.setPositiveButton("Recover", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String emaill=emailet.getText().toString().trim();
beginRecovery(emaill);
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
private void beginRecovery(String emaill) {
loadingBar=new ProgressDialog(this);
loadingBar.setMessage("Sending Email....");
loadingBar.setCanceledOnTouchOutside(false);
loadingBar.show();
// calling sendPasswordResetEmail
// open your email and write the new
// password and then you can login
mAuth.sendPasswordResetEmail(emaill).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
loadingBar.dismiss();
if(task.isSuccessful())
{
// if isSuccessful then done messgae will be shown
// and you can change the password
Toast.makeText(LoginActivity.this,"Done sent",Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(LoginActivity.this,"Error Occured",Toast.LENGTH_LONG).show();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
loadingBar.dismiss();
Toast.makeText(LoginActivity.this,"Error Failed",Toast.LENGTH_LONG).show();
}
});
}
public void loginUser(String email,String password){
mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if(task.isSuccessful()){
loginprogress.dismiss();
Intent mainIntent = new Intent(LoginActivity.this,MainActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mainIntent);
finish();
} else {
loginprogress.hide();
Toast.makeText(LoginActivity.this,"Cannot Sign In..Plaese Try Again",Toast.LENGTH_LONG);
}
}
});
}
}
输出:
GitHub链接: https : //github.com/Anni1123/LoginDemo