让每个用户都有自己的数据 - Flutter - Firebase

时间:2021-07-29 20:54:41

标签: firebase flutter dart

我正在像这样向 FireStore 添加数据:

onPressed: () async {
  // signInAnonymously();
  UserCredential userCredential =
      await FirebaseAuth.instance.signInAnonymously();
  addReminderToFirebase();
  validateForm();
},

.

Future<DocumentReference> addReminderToFirebase() {
  return FirebaseFirestore.instance
      .collection('Reminders')
      .add(<String, dynamic>{
    'text': "Remember to do Laundry",
    'timestamp': DateTime.now(),
    'userId': FirebaseAuth.instance.currentUser!.uid,
  });
}

目前我有每个人都可以访问的文档,但它们全都混淆了

如何让每个用户拥有自己的数据?其他人无法访问?

2 个答案:

答案 0 :(得分:1)

您应该使用他们的 userId 获取特定用户的数据。

您可以使用以下代码段获取当前用户数据。

await FirebaseFirestore.instance
        .collection('Reminders')
        .where('userId', isEqualTo: FirebaseAuth.instance.currentUser!.uid);

答案 1 :(得分:1)

您似乎有一个字段 userId 可用于获取该提醒的创建者。您可以检查请求提醒的用户是否是同一个人,即请求者的 UID 与 userId 字段相同。试试这些安全规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /Reminders/{reminderId} {
      allow read, write: if request.auth != null && resource.data.userId == request.auth.uid;
    }
  }
}

然后要获取单个用户的提醒,您可以使用 queries

var currentUser = FirebaseAuth.instance.currentUser
if (currentUser) {
 remindersCollection.where("userId", "==", currentUser.uid)
}
相关问题