Estoy creando el lado de autenticación de una aplicación web usando el inicio de sesión de Google de Firebase y me gustaría ver si newUser.displayName es único en la base de datos de Firestore. Mi código actual no funciona porque debo crear el usuario antes de acceder al displayName. Si primero creo el usuario y luego verifico el displayName, eso causaría problemas, ya que tendría que volver atrás y eliminar el usuario si no se cumple la condición. ¿Hay alguna forma de acceder a displayName antes de que se cree el usuario?
Registro.js
const handleGoogleSubmit = async (e) => { e.preventDefault(); setError(''); try { const available = await usernameAvailability(newUser.user.displayName.replace(/\s/g, "")) const newUser = await signInWithGoogle(email, password); const { isNewUser } = getAdditionalUserInfo(newUser) if (isNewUser) { await setDoc(doc(db, "users", newUser.user.uid), { email: newUser.user.email, uid: newUser.user.uid, username: newUser.user.displayName.replace(/\s/g, ""), usernameLowercase: newUser.user.displayName.toLowerCase(), }); } navigate('/account'); } catch (error) { setError(error.message); console.log(error.message); } }AuthContext.js
const usernameAvailability = async (username) => { const q = query(collection(db, "users"), where("usernameLowercase", "==", username.toLowerCase())); const querySnapshot = await getDocs(q) console.log(querySnapshot.empty, 'querySnapshot.empty') if (querySnapshot.empty) { return true } else { throw new Error("Username already exists") } }No hay forma de consultar la autenticación de Firebase por el nombre para mostrar de los usuarios, ni ninguna forma de garantizar a priori que los nombres para mostrar sean únicos. Ese no es su propósito, por lo que recomendaría no intentar que haga algo para lo que no estaba destinado.
El enfoque común para tener nombres de usuario únicos es almacenarlos en alguna base de datos alojada en la nube (como Realtime Database o Firestore en Firebase, pero otros también están bien) y consultar/reclamar un nombre allí antes de llamar a la API de Firebase para crear el usuario allí. .
Este tema se ha tratado varias veces antes, por lo que recomiendo consultar estos resultados de búsqueda , como: