# #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, поэтому я перепутал документацию. Вот документация для базы данных в реальном времени, хотя основная реализация не сильно отличается