Tengo Sign in With Facebook
e Sign In with Google
en mi aplicación web React.
Ahora, si el usuario ha iniciado sesión antes de usar Facebook y luego desea iniciar sesión con Google con la misma dirección de correo electrónico que la de su cuenta de Facebook, firebase devuelve este mensaje de error:
Ya existe una cuenta con la misma dirección de correo electrónico de otro proveedor
Mi pregunta ahora es ¿cómo obtengo la dirección de correo electrónico del objeto de error para poder dar a mis usuarios un mejor mensaje de error?
Aquí está mi código:
const handleFacebookSignIn = () => { let provider = new firebase.auth.FacebookAuthProvider(); firebase .auth() .signInWithPopup(provider) .then((result) => { //Handle success }).catch((error) => { let errorMessage = error.message; if (errorMessage.toLowerCase().includes("An account already exists with the same email address".toLowerCase())) { errorMessage = "Please sign in with your google account"; //How can I get the email address from the error object? } toast.error(errorMessage); }); }
Gracias.
Para averiguar qué proveedor tiene (o proveedores tienen) una entrada para una dirección de correo electrónico determinada, puede llamar a firebase.auth().fetchSignInMethodsForEmail
. Esto le permite iniciar el flujo de inicio de sesión correcto, una vez que un usuario haya ingresado su dirección de correo electrónico.
No hay forma en los SDK del lado del cliente de buscar directamente el UID en función de una dirección de correo electrónico. Si eso es necesario para su caso de uso (que se solicita con frecuencia, pero no muy a menudo es realmente necesario una vez que conoce fetchSignInMethodsForEmail
), la funcionalidad existe en los SDK de administración, por lo que puede incluirla en un punto final de API personalizado en su servidor. o i Cloud Functions: asegurando el acceso a eso como mejor le parezca.