【问题标题】:Firestore Query Not Working according to the security rulesFirestore 查询未根据安全规则工作
【发布时间】:2020-04-27 12:00:09
【问题描述】:

我正在使用 Cloud Firestore,我正在尝试更改我的安全规则。这是我想要的条件

只有电话号码在教师集合中的任何文档中的用户才能阅读教师集合中唯一的他/她的文档

这是我写的代码

    rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /Teachers/{teachers}{
    allow read: if((resource.data.mobno == request.resource.data.mobno) )
  allow update:if((request.resource.data.mobno == resource.data.mobno))


  }        


      }
    }

这是客户端查询

 Teacherref = FirebaseFirestore.getInstance().collection("Teachers");      
Teacherref.whereEqualTo("mobno",mobilecredential).get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                if(!queryDocumentSnapshots.getDocuments().isEmpty()){
                    for(QueryDocumentSnapshot data:queryDocumentSnapshots){
                        teacherdata=data.toObject(TeacherLoginModel.class);
                        if(TextUtils.isEmpty(teacherdata.getStatus()))signinuser(data);
                        else if(teacherdata.getStatus().equals("signout"))signinuser(data);
                        else {Toast.makeText(Signin.this, "You Are Already logged In Different Phone", Toast.LENGTH_SHORT).show();
                            predialog.dismiss();}
                    }
                }
                else{
                    predialog.dismiss();
                    Toast.makeText(Signin.this,"Please Check Your Credentials ", Toast.LENGTH_SHORT).show(); }
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Toast.makeText(Signin.this, e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });

【问题讨论】:

  • 您是否遇到任何错误?或者应用程序没有按您的意愿运行?
  • 显示权限被拒绝
  • 你可以试试这个路径吗? DocumentReference Teacherref = FirebaseFirestore.getInstance().document("Teachers/"+&lt;current_user_uid&gt;); 而不是 whereEqualTo?我假设这个查询是由用户自己完成的。然后使用 if-exists 逻辑?
  • 它不会工作,因为这个人没有登录但实际上只有那些老师可以在应用程序中注册,其号码已经存在于数据库中。这就是为什么我首先检查用户输入的号码数据库中是否存在,如果存在,他可以注册
  • 如果您希望未经身份验证的用户以某种方式访问​​您的应用,我强烈建议您使用 Firebase 云功能。当用户输入电话号码时,在 Firebase 实时数据库中创建该电话号码的节点,然后进一步使用 onCreate() 触发器来运行您的应用程序。这样您就不必担心 Firestore 规则以及来自客户端的数据库路径。

标签: firebase google-cloud-firestore firebase-security


【解决方案1】:

正如您将在documentation 中看到的,request.resource 对应于“新资源值,仅在写入请求时出现”。

所以你不能在read 规则中使用request.resource

【讨论】:

  • 它也不能写。我试过它说权限被拒绝
  • 您的update 规则应该有效。您是否尝试在 Firebase 控制台中使用模拟器进行检查?
  • 对不起,它在写上工作有没有办法在读中实现它
猜你喜欢
  • 2020-10-30
  • 2021-03-25
  • 2021-07-17
  • 1970-01-01
  • 2018-10-19
  • 2019-07-05
  • 1970-01-01
  • 2018-08-04
  • 2019-11-25
相关资源
最近更新 更多