Implementé una aplicación simple que contiene 2 botones: 1 para iniciar sesión a través de Google y el otro a través de Facebook.
Ambos métodos de autenticación funcionan individualmente, pero las cosas se complican más cuando:
Aquí viene el código de error auth/account-exists-with-different-credential que ya se ha mencionado aquí en stackoverflow Firebase JS API auth - account-exists-with- different-credential
El problema es que el objeto de error que recibo no contiene un nombre de propiedad de credential (ni un nombre de propiedad de email por cierto) en la pequeña aplicación que he creado.
Extracto de loginWithFacebook.js en la aplicación
export async function loginWithFacebook() { signInWithPopup(auth, new FacebookAuthProvider()) .then((result) => { const user = result.user; console.log(user); }) .catch(function (error) { if (error.code === 'auth/account-exists-with-different-credential') { console.log(error.credential); // undefined console.log(error.email); // undefined } }); }Tuve el mismo problema y pude solucionarlo investigando la propiedad customData del error devuelto. Probablemente este comportamiento diferente tenga que ver con la versión específica de Firebase. El mío es firebase@9.6.9.
Entonces, prueba a ver si esto funciona:
export async function loginWithFacebook() { signInWithPopup(auth, new FacebookAuthProvider()) .then((result) => { const user = result.user; console.log(user); }) .catch(function (error) { if (error.code === 'auth/account-exists-with-different-credential') { console.log(FacebookAuthProvider.credentialFromError(error)); console.log(error.customData.email); } });}