web-dev-qa-db-fra.com

Modifier le mot de passe avec Firebase pour Android

Je souhaite implémenter la fonctionnalité de changement de mot de passe pour mon application.

J'ai inclus com.google.firebase:firebase-auth:9.0.2 dans mon build.gradle fichier et jusqu'à présent tout a bien fonctionné jusqu'à ce que j'essaie d'implémenter la fonctionnalité de changement de mot de passe.

J'ai trouvé que l'objet FirebaseUser a une méthode updatePassword qui prend un nouveau mot de passe comme paramètre. Je pourrais utiliser cette méthode et implémenter la validation moi-même. Cependant, j'ai besoin du mot de passe actuel de l'utilisateur pour comparer avec celui entré et je ne peux pas trouver un moyen d'obtenir ce mot de passe.

J'ai également trouvé un autre méthode sur l'objet Firebase qui prend l'ancien mot de passe, le nouveau mot de passe et un gestionnaire. Le problème est que je dois également inclure com.firebase:firebase-client-Android:2.5.2+ pour accéder à cette classe et lorsque j'essaie cette méthode, j'obtiens l'erreur suivante:

Les projets créés sur console.firebase.google.com doivent utiliser les nouveaux SDK d'authentification Firebase disponibles sur firebase.google.com/docs/auth/

J'ai l'impression de manquer quelque chose ici. Quelle est l'approche recommandée pour mettre en œuvre cela? Et quand utiliser quelle dépendance?

21
nilsi

J'ai trouvé un exemple pratique de cela dans les documents Firebase :

Certaines actions sensibles à la sécurité, telles que la suppression d'un compte, la définition d'une adresse e-mail principale et la modification d'un mot de passe, nécessitent que l'utilisateur se soit récemment connecté. Si vous effectuez l'une de ces actions et que l'utilisateur s'est connecté il y a trop longtemps, le l'action échoue et lève FirebaseAuthRecentLoginRequiredException. Lorsque cela se produit, ré-authentifiez l'utilisateur en obtenant de nouvelles informations d'identification de connexion de l'utilisateur et en transmettant les informations d'identification pour se réauthentifier. Par exemple:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
AuthCredential credential = EmailAuthProvider
        .getCredential("[email protected]", "password1234");

// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    user.updatePassword(newPass).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                Log.d(TAG, "Password updated");
                            } else {
                                Log.d(TAG, "Error password not updated")
                            }
                        }
                    });
                } else {
                    Log.d(TAG, "Error auth failed")
                }
            }
        });
39
nilsi

Changer de mot de passe dans Firebase est un peu délicat. ce n'est pas comme ce que nous faisons habituellement pour changer le mot de passe dans les scripts côté serveur et la base de données. pour implémenter la fonctionnalité de changement de mot de passe dans votre application, vous devez d'abord obtenir l'e-mail de l'utilisateur à partir de FirebaseAuth ou Inviter l'utilisateur à entrer un e-mail et ensuite inciter l'utilisateur à entrer l'ancien mot de passe car vous ne pouvez pas récupérer le mot de passe de l'utilisateur comme l'a dit Frank van Puffelen. Après cela, vous devez réauthentifier cela. Une fois la réauthentification effectuée, en cas de succès, vous pouvez utiliser updatePassword(). J'ai ajouté un échantillon ci-dessous que j'ai utilisé pour ma propre application. J'espère que cela vous aidera.

private FirebaseUser user;
user = FirebaseAuth.getInstance().getCurrentUser();
                final String email = user.getEmail();
                AuthCredential credential = EmailAuthProvider.getCredential(email,oldpass);

                user.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if(task.isSuccessful()){
                                user.updatePassword(newPass).addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        if(!task.isSuccessful()){
                                            Snackbar snackbar_fail = Snackbar
                                                    .make(coordinatorLayout, "Something went wrong. Please try again later", Snackbar.LENGTH_LONG);
                                            snackbar_fail.show();
                                        }else {
                                            Snackbar snackbar_su = Snackbar
                                                    .make(coordinatorLayout, "Password Successfully Modified", Snackbar.LENGTH_LONG);
                                            snackbar_su.show();
                                        }
                                    }
                                });
                        }else {
                            Snackbar snackbar_su = Snackbar
                                    .make(coordinatorLayout, "Authentication Failed", Snackbar.LENGTH_LONG);
                            snackbar_su.show();
                        }
                    }
                });
            }
        }
16
Mohammad Julfikar

Il n'y a aucun moyen de récupérer le mot de passe actuel d'un utilisateur à partir de l'authentification Firebase.

Une façon d'autoriser vos utilisateurs à modifier leur mot de passe consiste à afficher une boîte de dialogue dans laquelle ils entrent leur mot de passe actuel et le nouveau mot de passe qu'ils souhaitent. Ensuite, vous connectez-vous (ou ré-authentifiez ) l'utilisateur avec le mot de passe actuel et appelez updatePassword() pour le mettre à jour.

12

La requête tourne autour des utilisateurs oubliant leurs mots de passe ou souhaitant réinitialiser leurs mots de passe via une lettre e-mail. Qui peut être atteint par Auth.sendPasswordResetEmail("[email protected]");

commencer par initialiser

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthListener;
    private String DummyEmail = "[email protected]"

    mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            if (firebaseAuth.getCurrentUser() == null) {
            }
        }
    };

Quelque part ailleurs, lorsqu'un utilisateur demande à mettre à jour ou à réinitialiser ses mots de passe, il suffit d'accéder au mAuth,

    private void PassResetViaEmail(){
    if(mAuth != null) {
        Log.w(" if Email authenticated", "Recovery Email has been  sent to " + DummyEmail);
        mAuth.sendPasswordResetEmail(DummyEmail);
    } else {
        Log.w(" error ", " bad entry ");
    }
    }

Maintenant, inutile de vous encombrer d'interroger votre base de données pour savoir si l'e-mail se termine ou non, Firebase mAuth s'en chargera pour vous.

L'e-mail est-il authentifié? Est-il actif dans votre liste d'authentification? Envoyez ensuite un e-mail de réinitialisation du mot de passe.

enter image description here

Le contenu ressemblera à ceci

enter image description here

le lien de réinitialisation invitera la boîte de dialogue suivante sur une nouvelle page Web io

Extra

si vous êtes un peu nerveux par le modèle de réinitialisation "conçu" par Firebase. Vous pouvez facilement accéder et personnaliser votre propre lettre à partir de la console Firebase. Authentification> Modèles d'e-mail> Réinitialisation du mot de passe

enter image description here

1
Alexandros