Tengo una configuración para escuchar cambios en tiempo real en la base de datos de firebase:
Así es como se ve la ruta: Path = funfuse/users/connected-users/AfYXmJroEKQwnhiFXXXXXiyblti22
Así es como está estructurada mi base de datos:
Cuando intento agregar una entrada al último hijo (es decir connected-users ), se actualiza en la base de datos, pero aunque tengo la aplicación ejecutándose en mi navegador web, no recibo ningún mensaje de registro para la actualización:
useEffect(() => { if (isLoggedIn && firebaseToken !== '') { const path = `${rdb_paths.funfuse_connected_users}/${user?.uid ?? ''}`; const connectionsRef = ref(rdb, path); console.log('Path = ', path); onValue(connectionsRef, (snapshot) => { console.log('Values = ', snapshot.val()); }); return () => { console.log('Switching off listening'); off(connectionsRef); }; } }, [firebaseToken, isLoggedIn, user?.uid]);¿Estoy haciendo algo mal aquí? ¿Por qué no puedo obtener las actualizaciones? Aquí están mis reglas de seguridad:
{ "rules": { "funfuse": { "users": { "requests-users": { "$uid": { ".read":"$uid === auth.uid && auth.token.email_verified === true", ".write":"$uid === auth.uid && auth.token.email_verified === true" } }, "requested-users": { "$uid": { ".read":"$uid === auth.uid && auth.token.email_verified === true", ".write":"$uid === auth.uid && auth.token.email_verified === true" } }, "connected-users": { "$uid": { ".read":"$uid === auth.uid && auth.token.email_verified === true", ".write":"$uid === auth.uid && auth.token.email_verified === true" } } } } } }Ejecuté una simulación para leer y escribir datos y funcionó bien. ¿Necesito agregar una regla adicional para escuchar las actualizaciones de datos?
Me di cuenta de que el problema se debía a que estaba tomando la URL de la base de datos default , ya que no la estaba pasando en mi objeto de configuración:
const firebaseConfig = { apiKey: process.env.NEXT_PUBLIC_FB_CLIENT_API_KEY, authDomain: process.env.NEXT_PUBLIC_FB_CLIENT_AUTH_DOMAIN, projectId: process.env.NEXT_PUBLIC_FB_CLIENT_PROJECT_ID, storageBucket: process.env.NEXT_PUBLIC_FB_CLIENT_STORAGE_BUCKET, messagingSenderId: process.env.NEXT_PUBLIC_FB_CLIENT_MESSAGING_SENDER_ID, appId: process.env.NEXT_PUBLIC_FB_CLIENT_APP_ID, measurementId: process.env.NEXT_PUBLIC_FB_CLIENT_MEASUREMENT_ID, };cambiando lo anterior a:
const firebaseConfig = { apiKey: process.env.NEXT_PUBLIC_FB_CLIENT_API_KEY, authDomain: process.env.NEXT_PUBLIC_FB_CLIENT_AUTH_DOMAIN, projectId: process.env.NEXT_PUBLIC_FB_CLIENT_PROJECT_ID, storageBucket: process.env.NEXT_PUBLIC_FB_CLIENT_STORAGE_BUCKET, messagingSenderId: process.env.NEXT_PUBLIC_FB_CLIENT_MESSAGING_SENDER_ID, appId: process.env.NEXT_PUBLIC_FB_CLIENT_APP_ID, measurementId: process.env.NEXT_PUBLIC_FB_CLIENT_MEASUREMENT_ID, databaseURL: process.env.NEXT_PUBLIC_FB_CLIENT_DB_URL, };resolvió el problema para mí.