在我的颤振应用程序中,我希望允许一个已签名的用户能够读取他们创建的文档/s(只有在DocumentID与UserID相同的情况下)。问题是documentID是由防火墙自动生成的。当我使用在documentID中签名的UserID显式指定documentID时,用户无法创建多个文档,因为documentID已经存在。请帮帮我..。
结果总是显示以下的快照错误..。
StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection('orders').snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
} else {
if (snapshot.hasError) {
return const Center(
child: Text('Oops, something went wrong...'),
);
}
}向Firestore添加数据
onPressed: () {
var firebaseUser = FirebaseAuth.instance.currentUser;
FirebaseFirestore.instance.collection('orders').add({
'date': FieldValue.serverTimestamp(),
'product': 'Jeans',
'total': cart.totalAmount,
'uid': firebaseUser!.uid,
});
cart.clearCart();
},显示来自Fi还原的数据
StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection('orders').snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
} else {
if (snapshot.hasError) {
return const Center(
child: Text('Oops, something went wrong...'),
);
}
}安全规则


发布于 2021-10-25 18:32:24
如果希望用户能够创建多个文档,则不能将其UID用作文档ID --因为文档ID在集合中是唯一的。
常见的方法是使用add()文档来让Firestore生成唯一的文档ID,然后将用户的UID存储在每个文档中的字段中(就像您似乎已经做的那样)。
然后,通过在写规则中调用isOwner助手函数,可以强制用户只编写包含自己的安全规则中的UID的文档:
allow write: if request.auth != null && isOwner();发布于 2021-10-25 18:38:08
要在数据库中添加数据时获取documentId:
DocumentReference docRef = _firestore.collection("orders").doc();
await docRef.set({
'id': docRef.id,
'date': FieldValue.serverTimestamp(),
'product': 'Jeans',
'total': cart.totalAmount,
'uid': firebaseUser!.uid,
});https://stackoverflow.com/questions/69712859
复制相似问题