Je pense qu'il existe un moyen de changer votre mot de passe dans Firebase, mais existe-t-il un moyen par lequel l'utilisateur oublie le mot de passe et peut en recevoir un nouveau ou être authentifié à nouveau par courrier électronique ou par SMS OTP. J'ai jeté un coup d'œil sur le net mais je n'arrivais pas à en trouver un.
S'il existe un moyen de le mettre en œuvre, tous les appels de fonction doivent être effectués. Pourriez-vous me diriger avec un exemple.
Il semble que vous souhaitiez envoyer un courrier électronique de réinitialisation de mot de passe. Voir cet exemple tiré de la documentation de Firebase :
FirebaseAuth.getInstance().sendPasswordResetEmail("[email protected]")
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "Email sent.");
}
}
});
Réinitialiser le mot de passe Android FireBase
Fichier Java
public class ResetPasswordActivity extends AppCompatActivity {
private EditText inputEmail;
private Button btnReset, btnBack;
private FirebaseAuth auth;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reset_password);
inputEmail = (EditText) findViewById(R.id.email);
btnReset = (Button) findViewById(R.id.btn_reset_password);
btnBack = (Button) findViewById(R.id.btn_back);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
auth = FirebaseAuth.getInstance();
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
btnReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email = inputEmail.getText().toString().trim();
if (TextUtils.isEmpty(email)) {
Toast.makeText(getApplication(), "Enter your registered email id", Toast.LENGTH_SHORT).show();
return;
}
progressBar.setVisibility(View.VISIBLE);
auth.sendPasswordResetEmail(email)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(ResetPasswordActivity.this, "We have sent you instructions to reset your password!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(ResetPasswordActivity.this, "Failed to send reset email!", Toast.LENGTH_SHORT).show();
}
progressBar.setVisibility(View.GONE);
}
});
}
});
}
}
FICHIER XML
<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="center"
Android:fitsSystemWindows="true"
tools:context=".LoginActivity">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="30dp"
Android:gravity="center"
Android:orientation="vertical"
Android:padding="@dimen/activity_horizontal_margin">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:padding="10dp"
Android:text="@string/lbl_forgot_password"
Android:textColor="@Android:color/white"
Android:textSize="20dp" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="10dp"
Android:gravity="center_horizontal"
Android:padding="@dimen/activity_horizontal_margin"
Android:text="@string/forgot_password_msg"
Android:textColor="@Android:color/white"
Android:textSize="14dp" />
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<EditText
Android:id="@+id/email"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="10dp"
Android:layout_marginTop="20dp"
Android:hint="@string/hint_email"
Android:inputType="textEmailAddress"
Android:textColor="@Android:color/white"
Android:textColorHint="@Android:color/white" />
</Android.support.design.widget.TextInputLayout>
<!-- Login Button -->
<Button
Android:id="@+id/btn_reset_password"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="20dip"
Android:background="@color/colorAccent"
Android:text="@string/btn_reset_password"
Android:textColor="@Android:color/black" />
<Button
Android:id="@+id/btn_back"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="10dp"
Android:background="@null"
Android:text="@string/btn_back"
Android:textColor="@color/colorAccent" />
</LinearLayout>
<ProgressBar
Android:id="@+id/progressBar"
Android:layout_width="30dp"
Android:layout_height="30dp"
Android:layout_gravity="center|bottom"
Android:layout_marginBottom="20dp"
Android:visibility="gone" />
</Android.support.design.widget.CoordinatorLayout>
Copié et collé de documentation :
FirebaseAuth auth = FirebaseAuth.getInstance();
String emailAddress = "[email protected]";
auth.sendPasswordResetEmail(emailAddress)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "Email sent.");
}
}
});
Ce lien vers la documentation devrait vous aider:
En bref, Firebase a une méthode à utiliser appelée changePassword, suivez le lien pour savoir comment l’implémenter.
Vous trouverez ci-dessous une méthode simple pour envoyer le lien de réinitialisation du mot de passe sur l'adresse électronique de l'utilisateur avec la boîte de dialogue de progression (parfois, firebase mettait du temps à terminer la demande réinitialisation du mot de passe en raison d'une connexion Internet lente côté client, donc boîte de dialogue de progression sera utile)
public void resetUserPassword(String email){
FirebaseAuth mAuth = FirebaseAuth.getInstance();
final ProgressDialog progressDialog = new ProgressDialog(ForgotPasswordActivity.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();
}
});
}
Si Kotlin est votre langue de choix, vous pouvez utiliser ceci:
val fAuth = FirebaseAuth.getInstance()
fAuth.sendPasswordResetEmail(email).addOnCompleteListener({ listener ->
if (listener.isSuccessful) {
// Do something when successful
} else {
// Do something when not successful
}
})