类型错误:n.indexOf不是firebase/firestore v9的函数错误

sf6xfgos  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(91)

我收到一个类型错误:当尝试访问我的数据库中的customers集合时,indexOf不是函数错误。但是,我可以很好地访问products集合。
这是我正在尝试的代码:

const taskQuery = doc(collection(db, "customers"), where("uid", "==", user.uid))
    const loadCheckout = async (priceId) => {
        try {
            const taskDocs = await getDocs(taskQuery)

        } catch (error) {
            console.log(error.message)
        }
    }

定义了user. uid,并且由于我可以访问"products"集合,因此应用初始化已正确连接。如果我删除"where(" uid "...)",则会出现"权限缺失或不足"错误,这使我相信规则中存在错误。
规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /customers/{uid} {
      allow read: if request.auth.uid == uid;

      match /checkout_sessions/{id} {
        allow read, write: if request.auth.uid == uid;
      }
      match /subscriptions/{id} {
        allow read: if request.auth.uid == uid;
      }
    match /products/{id} {
      allow read: if true;

      match /prices/{id} {
        allow read: if true;
      }

      match /tax_rates/{id} {
        allow read: if true;
      }
    }
  }
}

firestore database](https://i.stack.imgur.com/g4UcV.png

vngu2lb8

vngu2lb81#

这行不通:

const taskQuery = doc(collection(db, "customers"), where("uid", "==", user.uid))

doc()函数需要一个db和文档路径,而不是一组条件。
如果要创建查询,应改用query函数:

const taskQuery = query(collection(db, "customers"), where("uid", "==", user.uid))

我敢肯定,这也解释了权限被拒绝的原因,因为您的代码可能试图读取整个customers集合,而不仅仅是安全规则允许的用户自己的文档。

相关问题