База данных Firebase в реальном времени иногда не обновляется

# #reactjs #firebase #firebase-realtime-database

Вопрос:

Я реализовал функцию присутствия, обратившись к документации Firebase. Однако иногда онлайн-статус, вызванный onDisconnect, не обновляется и остается в базе данных реального времени. Я не смог определить проблему, но, похоже, это происходит на Mac / safari и iOS.

 ....

  useEffect(() => {
    const connectedRef = ref(db, '.info/connected');

    const unsubscribe = onValue(connectedRef, async (snap) => {
      if (snap.val() === true) {
        const con = await push(myConnectionsRef);

        await onDisconnect(con).remove();

        await set(con, true);
      }
    });

    return () => {
      unsubscribe();
    };
  }, []);

....
 

Правила безопасности заключаются в следующем, и я не думаю, что проблема в том, что при выходе из системы не будет записано.

 {
  "rules": {
    "connections": {
      ".read": true,
      ".write": true
    }
  }
}
 

Ответ №1:

Не могли бы вы, пожалуйста, попробовать изменить правило таким образом:

 {
  "rules": {
    "connections": {
      allow read, write: if request.auth != null;
    }
  }
}
 

То есть только пользователь может получить доступ, если он вошел в систему.

Комментарии:

1. Спасибо тебе, Элджос. Но я уже писал следующий код раньше, и даже тогда у меня была проблема с сохранением статуса. « { «правила»: { «соединения»: { «.чтение»: true, «$uid»:{ «.запись»: «auth.uid === $uid» } } } } « Предложение, которое вы дали, похоже, не слишком отличается от приведенного выше кода.

2. @yyddoi Вы работаете с базой данных в реальном времени или с Firestore?? Предоставленная вами документация относится к Firestore

3. Что я хочу знать, так это спецификацию базы данных в реальном времени. Я также использую Firestore, поэтому я перепутал документацию. Вот документация для базы данных в реальном времени, хотя основная реализация не сильно отличается