Firebase DB невозможно обновить, работает только в режиме отладки

#firebase #react-native #firebase-realtime-database #react-native-firebase

#firebase #react-native #firebase-база данных в реальном времени #react-native-firebase

Вопрос:

У меня есть приложение react native, которое определяет, разрешает ли пользователь обмен сообщениями Firebase Cloud, а затем сохраняет токен пользователя. Это также сохраняет геолокацию пользователей примерно в то же время.

Обе эти функции работают нормально, если в моем эмуляторе включен режим отладки. Однако, если режим отладки не запущен, я получаю предупреждение об отказе в разрешении. Кто-нибудь знает, почему это работает только в режиме отладки?

         geoFire.set(uid, [userLocation.lat, userLocation.lng]); 
  

Приведенный выше код должен сохранить местоположение. (Это работает с включенным режимом отладки).

 const firebaseConfig = {
    apiKey: 'AIzaSyAZxxxxxxx',
    authDomain: 'thxxxxxx',
    databaseURL: 'https://thxxxxxxx',
    storageBucket: 'thxxxxxxxxxxxxx',
}

// Initialize Firebase
const Firebase = firebase.initializeApp(firebaseConfig)
  

Я использую базу данных реального времени со следующими правилами доступа

 {
  "rules": {
    ".read": "auth.uid != null",
    ".write": "auth.uid != null"
  }
}
  

Я обнаружил, что многие пользователи получили это предупреждающее сообщение / проблему, потому что права базы данных неверны. Однако я дважды проверил их в руководстве по Firebase, и они должны работать следующим образом (протестировано на игровой площадке правил в консоли firebase.

Ответ №1:

Ошибка «Отказано в разрешении» означает, что правила безопасности отклонили запрос. Если единственными правилами для вашего приложения являются те, что показаны здесь, это означает, что на момент запроса пользователь не входил в приложение.

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

1. Ну, у меня действительно есть подписанный пользователь, с токенами и refreshtokens и т.д. Но все мои другие запросы, которые я делаю к базе данных, связаны с http-ссылками, в которые я помещаю пользовательские токены, и все это работает. Как я должен войти в систему пользователя, чтобы иметь возможность, например, заставить Geofire set commando работать?

2. Я не уверен, что вы имеете в виду. Вы хотите сказать, что используете REST API для выполнения запросов к базе данных вместо предоставленного SDK? REST API имеет свой собственный способ указания аутентифицированного пользователя, и вам нужно будет следовать документации, чтобы это произошло.

3. Извините, нет, у меня есть две функции, которые не работают с REST API. Они работают так, как должны. Итак, я думаю, мне нужно выяснить, как я могу аутентифицировать пользователя с помощью пакета react-native-firebase?

4. Да, это требование для использования правил, которые у вас есть сейчас.

5. Итак, я, наконец, пошел дальше с этой проблемой, но я не могу найти в документации, как я должен с этим справиться. У меня есть токен и refreshtoken в асинхронном хранилище. При открытии приложения оно проверяет, действителен ли токен, если нет, оно извлекает новый токен с помощью refreshtoken. Однако я не могу найти функцию, которая позволяет мне входить в систему пользователя, используя только токен / refreshtoken / userId или что-то в этом роде. Пользователи не входят в приложение постоянно, потому что токены действительны. Существует ли такая функция для входа пользователей только с токеном и идентификатором или что-то в этомроде?