# #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. Надеюсь, это поможет вашему рабочему процессу разработки