FirebaseAuthInvalidCredentialsException al usar "Una cuenta por dirección de correo electrónico"

… si no permite varias cuentas con la misma dirección de correo electrónico, un usuario no puede crear una cuenta nueva que inicie sesión con una cuenta de Google con la dirección de correo electrónico [email protected] si ya hay una cuenta que accede mediante La dirección de correo electrónico [email protected] y una contraseña.

Pude iniciar sesión con el proveedor de Google para el mismo correo electrónico que ya estaba registrado a través del proveedor de correo electrónico, por lo que el proveedor de Google reemplazó proveedor de correo electrónico y, posteriormente, no inicia sesión con FirebaseAuthInvalidCredentialsException: La contraseña no es válida o el usuario no tiene una contraseña. .

Pasos para reproducir:

Regístrese con el proveedor de correo electrónico -> Cerrar sesión -> Iniciar sesión con el proveedor de Google -> Salir

Básicamente no debe permitir reemplazar a un proveedor por otro y lanzar FirebaseAuthUserCollisionException: La dirección de correo electrónico ya está en uso por otra cuenta.

Algunos códigos que utilizo para iniciar sesión / salir:

public void signUpEmail(String email, String password) { mFirebaseAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, task -> { if (!task.isSuccessful()) { Log.e("signUpWithEmail", task.getException()); } }); } private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); mFirebaseAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (!task.isSuccessful()) { Log.e("signInWithCredential", task.getException()); } } }); } public void signInEmail(String email, String password) { mFirebaseAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, task -> { if (!task.isSuccessful()) { Log.e("signInWithEmail", task.getException()); } }); } public void signOut() { Auth.GoogleSignInApi.signOut(mGoogleApiClient); mFirebaseAuth.signOut(); startSignInActivity(); } 

¡Gracias!

Varias cuentas por dirección de correo electrónico creará un nuevo usuario con un uid diferente para diferentes proveedores que utilicen el mismo correo electrónico.

Para recrear:

  1. Inicia sesión con google email x @ x
  2. Iniciar sesión con facebook email x @ x
  3. Crear cuenta de contraseña de correo electrónico x @ x

Ahora obtendrás 3 usuarios diferentes.

Si utiliza las cuentas únicas recomendadas por correo electrónico, los 3 proveedores anteriores estarán dentro del mismo usuario (un uid).

Cuando primero crea la cuenta de google x @ x e intenta iniciar sesión con la nueva cuenta de Facebook con el correo electrónico x @ x, obtendrá un error que es necesario vincular para continuar. A continuación, tendrá que iniciar sesión en el primer usuario de Google y vincular el nuevo usuario de Facebook a la misma.

Para optimizar los pasos de la UI de inicio de sesión y mejorar la seguridad de la cuenta, Firebase Authentication tiene un concepto de "proveedor de confianza", donde el proveedor de identidad también es el proveedor de servicios de correo electrónico. Por ejemplo, Google es el proveedor de confianza para las direcciones @ gmail.com, Yahoo es el proveedor de confianza para las direcciones @ yahoo.com y Microsoft para las direcciones @ outlook.com.

En el modo "Una cuenta por dirección de correo electrónico", Firebase Authentication intenta vincular la cuenta en función de la dirección de correo electrónico. Si un usuario inicia sesión en un proveedor de confianza, el usuario inicia sesión inmediatamente en la cuenta, ya que sabemos que el usuario posee la dirección de correo electrónico.

Si hay una cuenta existente con la misma dirección de correo electrónico pero creada con otras credenciales (por ejemplo, contraseña o proveedor no confiable), las credenciales anteriores se eliminan por razones de seguridad.

Un phisher (que no es el propietario de la dirección de correo electrónico) podría crear la cuenta inicial: eliminar la credencial inicial evitaría que el phisher accediera a la cuenta posteriormente. El usuario legítimo puede configurar una contraseña al pasar por el flujo de restablecimiento de contraseña, donde ella tendría que demostrar que es propietaria de la dirección de correo electrónico.

  • Obtención de eventos del calendario
  • Inicia sesión silenciosa para recuperar el token con GoogleApiClient
  • ¿Cómo conecto las aplicaciones de Android con hojas de cálculo de hojas de cálculo de Google?
  • Android System WebView bloquea las aplicaciones de Android! "Las piedras sepulcrales están deshabilitadas en las compilaciones de usuarios de JB MR2 +"
  • ¿Puedo usar AccountManager para permitir que los usuarios inicien sesión con su cuenta de Google?
  • Cómo asignar una imagen (mapa de bits) mediante programación a un contacto?
  • Utilizar la autenticación de inicio de sesión de cuenta de Google para aplicaciones en Android
  • ¿Cómo implementar la funcionalidad de búsqueda para Google Map Api V2 Android?
  • Cómo traducir de un idioma a otro en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.