我得到了错误

gettingdocuments.com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED:缺少或权限不足。

对于下面关于else语句的代码

db.collection("users")
    .get()
    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
             if (task.isSuccessful()) {
                 for (DocumentSnapshot document : task.getResult()) {
                     s(document.getId() + " => " + document.getData());
                 }
             } else {
                 s("Error getting documents."+ task.getException());
             }
         }
     });

当前回答

也许你该把日期去掉

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if
          request.time < timestamp.date(2021, 12, 12);
    }
  }
}

其他回答

此外,如果您的代码中的集合引用与firebase上的集合名称不匹配,则可能会出现此错误。

例如,firebase上的集合名称是users,但您使用db.collection(" users ")或db.collection("user")引用它。

它也是区分大小写的。

希望这对大家有所帮助

经过批准的答案是非常危险的,因为任何人都可以在没有任何许可的情况下读取或写入您的数据库。我建议用这个。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow write: if request.auth != null;
      allow read: if true;
    }
  }
}

这将允许授权人员写入数据库,而任何人都可以读取数据库,以防访问者访问网站。

此时,即2020年6月,默认情况下firebase是按时间定义的。 为满足自己的需要而安排好时间。

allow read, write: if request.time < timestamp.date(2020, 7, 10);

请注意:你的数据库仍然对任何人开放。我建议,请阅读文档并以对您有用的方式配置DB。

进入firebase控制台=>云firestore数据库,添加允许用户读写的规则。

=>允许读写

如果你尝试在Java Swing应用程序。

进入Firebase控制台>项目概述>项目设置 然后转到服务帐户选项卡,然后单击生成新的私钥。 你会得到一个.json文件,把它放在一个已知的路径中 然后进入“我的电脑属性”、“高级系统设置”、“环境变量”。 创建新的路径变量GOOGLE_APPLICATION_CREDENTIALS值和json文件的路径。