Не удается получить данные из базы данных в режиме реального времени с анонимной аутентификацией (React Native) - разрешение запрещено - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь внедрить анонимную аутентификацию в моем приложении. Я сделал это с React Native Firebase (https://rnfirebase.io/). Пока регистрация хороша. Пользователь подписывается, и я получаю идентификатор пользователя для этого конкретного случая. Вот мой код:

const authenticate = async () => {
    await auth()
      .signInAnonymously()
      .then(() => {
        console.log('User signed in anonymously');
        console.log(user);
        firebase.auth().onAuthStateChanged(user => {
          if (user != null) {
            fetchData();
          }
        });
      })
      .catch(error => {
        if (error.code === 'auth/operation-not-allowed') {
          console.log('Enable anonymous in your firebase console.');
        }
        setFetching(false);
        console.error(error);
      });
  };

Как видите, если вы проверите деталь, когда регистрация прошла успешно, у нас есть функция fetchData (). Эта функция извлекала мои данные из базы данных в реальном времени. Вот оно:

  const fetchData = async () => {
    try {
      await fetch(setLocale())
        .then(response => response.json())
        .then(responseJSON => {
          saveFavoritesFromAsync(responseJSON);
          setFetched(true);
          setFetching(false);
          fetchMedusa();
        });
    } catch (error) {
      console.log(error);
      setFetching(false);
    }
  };

Проблема возникает, когда я внедряю правила в firebase. До этого у меня было все открыто (читай: правда, пиши: правда), но чтобы добавить немного безопасности, я пытаюсь добавить эту анонимную аутентификацию. Мои правила теперь таковы:

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

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

Что я делаю не так? Должен ли я передать идентификатор пользователя при получении? Пожалуйста, помогите

Большое спасибо

1 Ответ

0 голосов
/ 14 апреля 2020

Я решил это.

Пакеты, которые приходят из React Native Firebase, должны использоваться вместе. То, что происходило, было:

Я использовал метод извлечения из реагировать нативно. Вы должны использовать пакет базы данных Firebase, который они вам дают для извлечения или записи данных.

Посмотрите, как выглядит моя выборка:

 await database()
        .ref(setLocale())
        .once('value')
        .then(responseJSON => {
          if (responseJSON.error) {
            setFetching(false);
            setFetched(false);
          } else {
            saveFavoritesFromAsync(responseJSON.val());
            setFetched(true);
            setFetching(false);
            fetchMedusa();
          }

Также важно, ответ JSON данные должны быть сохранены с помощью метода .val (), иначе они будут неправильными.

Я надеюсь, что это может помочь кому-то нуждающемуся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...