Включение токена Firebase в получение данных из облачного хранилища

#firebase #flutter #google-cloud-firestore

#firebase #flutter #google-cloud-firestore

Вопрос:

В моем приложении Flutter я решил использовать firebase cloud firestore вместо подхода к базе данных в реальном времени. Мне удалось написать коды для CRUD без выполнения HTTP-запросов. Я пытаюсь понять, как включить идентификатор пользователя и UserToken, созданные при входе пользователя в систему, поскольку у меня нет URL-адреса, используемого в моем коде. Без токена я не могу получать товары из базы данных, учитывая правила, требующие входа пользователя в систему. Пожалуйста, смотрите Мой фрагмент кода ниже для получения данных. Я буду признателен за указание того, как включить авторизацию заголовка с помощью токена в сегмент моментального снимка collections.get() . Я перепробовал все предложения в Интернете, но безуспешно. Спасибо

 //    var user = FirebaseAuth.instance.currentUser;
    try {
      final List<Product> loadedProducts = [];

      await _firestore
          .collection("products")
//          .get(headers: {HttpHeaders.authorizationHeader: '$authToken'}).then(
          .get()
          .then(
        (QuerySnapshot snapshot) {
          'Authorization: Bearer $authToken';
          if (snapshot != null) {
            snapshot.docs.forEach(
              (f) {
                loadedProducts.add(
                  Product(
                    id: f.id,
                    price: f.data()['price'],
                    title: f.data()['title'],
                    description: f.data()['description'],
                    imageUrl: f.data()['imageUrl'],
                    isFav: f.data()['isFav'],
                    category: f.data()['category'],
                    isSelected: f.data()['isSelected'],
                  ),
                );
              },
            );
          }
        },
      );
      _items = loadedProducts;
      notifyListeners();
    } catch (e) {
      throw e;
    }
  }
  

Ответ №1:

Из вашего вопроса неясно, как вы регистрируете пользователя.

Если вы зарегистрируете пользователя, вызвав Firebase Authentication SDK, то эта информация для входа будет автоматически передана вместе с вызовами базы данных.

Итак: до тех пор, пока ваш get() вызов Firestore происходит после завершения входа с помощью Firebase Authentication SDK, будет передан токен ID, и request.auth переменная в ваших правилах безопасности будет отражать это.

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

1. Я подписывал пользователя, используя код http-запроса, и проверял, что пользователь вошел в систему, прежде чем перейти к следующему экрану, на котором извлекаются товары из базы данных. Я получаю сообщение об ошибке, что у пользователя / вызывающего абонента нет разрешения на получение данных. Когда я ослабляю правила, которые не должны быть привязаны к авторизованному пользователю, извлекаются данные, подразумевая, что, возможно, bcos idtoken не был включен в запрос. Я знаю, как это сделать для http get, но не для collections.get

2. Выполнение HTTP-запроса может дать вам токен, но вам нужно будет вызвать signInWith... метод Firebase для входа этого пользователя в клиент аутентификации, чтобы он передавал токен ID вместе с запросами в Firestore.