从云firestore获取数据时包含Firebase令牌
在我的Flatter应用程序中,我选择使用firebase cloud firestore而不是实时数据库方法。我成功地为CRUD编写了代码,而没有发出http请求。由于我的代码中没有使用url,因此我正在努力研究如何包含用户登录时创建的userId和userToken。如果没有令牌,我无法从数据库中获取产品项,因为规则要求用户登录。请参阅下面我的代码片段以获取数据。我希望能提供一个指针,说明如何在collections.get()的快照段中包含带有令牌的头授权。我在网上尝试了所有的建议,但都没有成功。谢谢从云firestore获取数据时包含Firebase令牌,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,在我的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使用…方法调用FirebasesignInWith…
方法将该用户签名到身份验证客户端,以便它将ID令牌与请求一起传递到Firestore。嘿@Obisi7。您对此有进一步的了解吗?如果我的答案有用,请单击upvote按钮(▲) 如果它回答了您的问题,请单击复选标记(✓) 接受它。这样别人就会知道你已经得到了(足够的)帮助。也请参见