2017-09-19 6 views
0

Je permet à l'utilisateur de s'inscrire avec Google, Facebook ou Email. Suivez ce link Je sais comment relier plusieurs fournisseur auth au même compte mais voici mon scénarioFirebase ajouter/lien mot de passe à fournisseur fédéré existant

Laissez dire un utilisateur créer un compte avec Google ou Facebook mais plus tard (après que son compte créé), il veut définir un mot de passe afin qu'il puisse Connectez-vous avec email et mot de passe. Je sais comment lier un compte email/mot de passe avec un autre fournisseur fédéré (google, facebook) mais pas l'inverse. Mon seul cependant est de créer un nouveau compte avec ce nouveau mot de passe et e-mail associé à la méthode qu'ils choisissent au début, mais cela ne fonctionnera pas en raison de l'existence de courriels existent déjà. J'autorise même allow multiple account with same address sur ma console mais ça renvoie ERROR_EMAIL_ALREADY_IN_USE alors je pense que ça ne marche pas avec email/mot de passe.

Alors, comment puis-je ajouter un mot de passe à ce compte après m'être inscrit sur Facebook ou Google? Merci à toute avance.

Répondre

0

De l'documentation on linking account providers:

Email mot de passe de connexion

AuthCredential credential = EmailAuthProvider.getCredential(email, password); 

Et puis vous liez les informations d'identification avec le accont Google/Facebook existant:

Passez l'objet AuthCredential à la méthode linkWithCredential de l'utilisateur connecté:

mAuth.getCurrentUser().linkWithCredential(credential) 
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      if (task.isSuccessful()) { 
       Log.d(TAG, "linkWithCredential:success"); 
       FirebaseUser user = task.getResult().getUser(); 
       updateUI(user); 
      } else { 
       Log.w(TAG, "linkWithCredential:failure", task.getException()); 
       Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", 
         Toast.LENGTH_SHORT).show(); 
       updateUI(null); 
      } 
      // ... 
     } 
    });