Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从云firestore获取数据时包含Firebase令牌_Firebase_Flutter_Google Cloud Firestore - Fatal编程技术网

从云firestore获取数据时包含Firebase令牌

从云firestore获取数据时包含Firebase令牌,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,在我的Flatter应用程序中,我选择使用firebase cloud firestore而不是实时数据库方法。我成功地为CRUD编写了代码,而没有发出http请求。由于我的代码中没有使用url,因此我正在努力研究如何包含用户登录时创建的userId和userToken。如果没有令牌,我无法从数据库中获取产品项,因为规则要求用户登录。请参阅下面我的代码片段以获取数据。我希望能提供一个指针,说明如何在collections.get()的快照段中包含带有令牌的头授权。我在网上尝试了所有的建议,但都没

在我的Flatter应用程序中,我选择使用firebase cloud firestore而不是实时数据库方法。我成功地为CRUD编写了代码,而没有发出http请求。由于我的代码中没有使用url,因此我正在努力研究如何包含用户登录时创建的userId和userToken。如果没有令牌,我无法从数据库中获取产品项,因为规则要求用户登录。请参阅下面我的代码片段以获取数据。我希望能提供一个指针,说明如何在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;
    }
  }
//var user=FirebaseAuth.instance.currentUser;
试一试{
加载产品的最终列表=[];
等待!
.收集(“产品”)
//.get(标头:{HttpHeaders.authorizationHeader:'$authToken'})。然后(
.get()
.那么(
(QuerySnapshot快照){
'授权:持票人$authToken';
如果(快照!=null){
snapshot.docs.forEach(
(f){
loadedProducts.add(
产品(
id:f.id,
价格:f.data()['price'],
标题:f.data()['title'],
description:f.data()['description'],
imageUrl:f.data()['imageUrl'],
isFav:f.data()['isFav'],
类别:f.data()['category'],
isSelected:f.data()['isSelected'],
),
);
},
);
}
},
);
_项目=装载的产品;
notifyListeners();
}捕获(e){
投掷e;
}
}

您的问题不清楚用户是如何登录的

如果您通过调用Firebase身份验证SDK来登录用户,则该登录信息将与数据库调用一起自动传递


所以:只要你的Firestore
get()
调用在使用Firebase Authentication SDK完成登录后发生,ID令牌将被传递,安全规则中的
request.auth
变量将反映这一点。

我使用http请求代码登录用户,并在转到下一个屏幕之前验证用户是否登录已检索数据库。我收到一个错误,用户/调用方没有获取数据的权限。当我放宽规则以不绑定到授权用户时,检索数据意味着请求中可能不包含bcos idtoken。我知道如何对http get而不是集合执行此操作。getMaking http请求可能会给您一个令牌,但您将无法使用ed使用…方法调用Firebase
signInWith…
方法将该用户签名到身份验证客户端,以便它将ID令牌与请求一起传递到Firestore。嘿@Obisi7。您对此有进一步的了解吗?如果我的答案有用,请单击upvote按钮(▲) 如果它回答了您的问题,请单击复选标记(✓) 接受它。这样别人就会知道你已经得到了(足够的)帮助。也请参见