#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 или что-то в этом роде. Пользователи не входят в приложение постоянно, потому что токены действительны. Существует ли такая функция для входа пользователей только с токеном и идентификатором или что-то в этомроде?