Estaba desarrollando una aplicación que me gusta implementa Firebase como sistema de autenticación.
Mi problema surge cuando trato de configurar la autenticación con el proveedor de Google cuando intento modificar la colección de firestore donde se guardan los usuarios. Mi código es el siguiente:
export const loginWithGoogle = () => { const navigation = useNavigation(); useEffect(() => { setTimeout(() => { navigation.navigate('/RegisterScreen'); }, 10000); }, []); return () => { return firebase .auth() .signInWithPopup(Providers.google) .then(async result => { //console.log(result.credential.accessToken); const user = result.user; console.log(user); //This 2 lines below doesn't work to get the colletion. db.('users').setItem('userid', user!.uid); collection.(db,'users').setItem('photoURL', user!.photoURL); //TODO if userid exists IN USERS db then use update IF NULL use set await db.collection('users').doc(user!.uid).update({ // id: user.uid, name: user!.displayName, email: user!.email, phone: user!.phoneNumber, photoURL: user!.photoURL, }); }) .then(() => { navigation.navigate('ProtectedScreen'); }) .catch(err => { console.log(err); }); }; };Así que supongo que mi error proviene del desconocimiento de cómo administrar los datos guardados en Firestore.
Si puede ayudar tomar gracias de antemano!
Hay algunas cosas que debemos aclarar aquí:
Simplemente puede fusionar los datos. No es necesario leerlo u obtenerlo de Firestore para verificar si está allí y guardarlo solo si no lo está. Se le cobrará por reads y writes . Al final es más barato escribir siempre sin comprobar si existe algo.
También este código aquí:
db.('users').setItem('userid', user!.uid); collection.(db,'users').setItem('photoURL', user!.photoURL); especialmente con db.( y collection.( no se ve bien. Incluso si lo es, no es para obtener datos sino para guardarlos.
¿Podría aclarar qué Firebase SDK usa: versión 8 o 9? También consulte un poco los documentos aquí .