Как я могу получать обновления в реальном времени из firestore в своем приложении react-native? Я хочу запретить несколько входов в систему от одного и того же пользователя с разных устройств

# #android #firebase #react-native #google-cloud-firestore

Вопрос:

Я работаю над одним приложением в react-native. Я хочу сделать такую функциональность. 1)Когда пользователь войдет с 1-го устройства со своими учетными данными, в это время я сохраняю идентификатор устройства в своей базе данных firestore. теперь, если пользователь выполнит вход со 2-го устройства с теми же учетными данными в то время, я собираюсь выйти из системы этого пользователя с 1-го устройства. Я реализовал эту логику. Но проблема в том, что это происходит не в реальном времени. Когда я перезапущу приложение 1-го устройства в это время, эта логика работает. Существует ли какой — либо метод, который срабатывает при обновлении моей базы данных? Я хочу, чтобы эта логика работала немедленно, когда пользователь входит в систему с другого устройства с тем же идентификатором.

 const onAuthStateChanged = async (user) => {
setUser(user);
if (user) {
  //here i am checking for token 

  await firestore()
    .collection('Users')
    .doc(user.email)
    .get()
    .then((documentSnapshot) => {
      const data_device = documentSnapshot.data();

      if (device_id != data_device.device_token) {
        alert('you are signned in other device'); //and if not as same then logout
        logout();
      }
    });
}
if (inisiallizing) setInisiallizing(false);
};    
 

Ответ №1:

onAuthStateChanged Единственный запуск, когда authState измененный (вход, выход, регистрация) и его состояние выполняются самостоятельно (не запускаются в нескольких средах, устройствах).

В качестве вашего удобства, я думаю, вам следует послушать documents магазин on Firestore, в котором хранятся ваши deviceId

 firestore()
  .collection('Users')
  .doc(user.email)
  .onSnapshot((doc) => {
    // Your logic to logout here
  })
 

Приведенный выше код будет выполняться каждый раз, когда документ firestore().collection('Users').doc(user.email) обновляется

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

1. Да, спасибо @ThanhLe за ваш ответ. Это сработало для меня.

2. Добро пожаловать @Милан. Я основатель refiapp.io — Инструмент, позволяющий сделать разработчиков менее болезненными при взаимодействии с базой данных Firestore. Надеюсь, это поможет вашему рабочему процессу разработки