Firestore查询无法获取文档

时间:2020-05-25 23:02:24

标签: firebase flutter dart google-cloud-firestore

所以我在名为“作者”的集合中有一个数组。我想检查某个字符串(邮件)是否存在,但是它说对getDocuments的权限被拒绝。 这是一个小片段:

  List<String> authors;

  _getAuthors(DocumentSnapshot doc) async {
    if (await FirebaseAuth.instance.currentUser() != null) {
      var query = Firestore.instance
          .collection('mealList')
          .where('Authors', arrayContains: mail);
      query.getDocuments().then((value) => print(value));
    }
  }

  Widget buildItem(DocumentSnapshot doc) {
    DateTime now = doc.data['Date'].toDate();
    DateFormat formatter = DateFormat('dd-MM-yyyy');
    String formatted = formatter.format(now);
    _getUserId();
    _getMail(doc);
    if (doc.data['Authors'] != null) {
      _getAuthors(doc);
    }

这是我的数据库规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    match /mealList/{uid} {
      allow read, write: if request.auth == null;
    }

    match /shoppingList/{uid} {
      allow read, write: if request.auth != null;
    }
  }
}

2 个答案:

答案 0 :(得分:0)

<form class ="Contactform" action = "contact.php">
        <div class = "columns">
            <div class = "column is-half">
                <div class = "title is-1 ">
                    Contact Form
                </div>
            </div>
                <div class = "column is-half">
                    <div class = "field">
                        <label class = "label namepart">Name</label>
                        <div class = "control">
                          <input class ="input name" type="text" placeholder = "e.g John Doe" name = "name"> 
                        <div class="field emailpart">
                            <label class="label">Email</label>
                            <div class="control has-icons-left has-icons-right">
                             <input class="input email" type="email" placeholder="Email input" value="name@" name = "email">
                             <span class="icon is-small is-left">
                                <i class="fas fa-envelope"></i>
                             </span>
                             <span class="icon is-small is-right">
                              </span>
                            </div>
                        </div>
                     </div>
                        <div class ="Messagepart">
                     <label class = "label">Message</label>
                        <textarea class="textarea" placeholder="e.g. Description" name = "msg"></textarea>
                    </div>
                    <div>
                        <br>
                        <button class= "button is-sucess "> Submit </button>
                    </div>
                </div>
            </form>


答案 1 :(得分:0)

在餐单中,您已将规则声明为

match /mealList/{uid} {
      allow read, write: if request.auth == null;
    }

这不允许获得授权的用户进行读写。

因此,尝试将其替换为:

match /mealList/{uid} {
      allow read, write: if request.auth != null;
    }