You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore获取用户事件时遇集合引用无效错误,求解决方案

问题分析与解决

错误原因

你遇到的FirebaseError: Invalid collection reference是因为代码中collection(db, "events", uid)生成的是文档路径(段数为2,偶数),而Firestore要求集合引用的路径段数必须是奇数。这段代码实际指向的是events集合中ID为uid的单个文档,而非你需要的事件集合。

同时你的Firestore规则写法和数据查询逻辑不匹配:原规则匹配的是events集合中ID等于用户uid的单个文档,但你实际要查询的是该用户创建的所有事件文档。

解决方案

1. 修正前端查询代码

将集合引用改为正确的events集合,保留where条件筛选当前用户创建的事件:

import { db } from "../firebase";
import { collection, query, getDocs, where } from "firebase/firestore";
import getCurrentUser from "./CurrentUser";

const getEvents = async () => {
  // 注意:如果getCurrentUser是异步函数,这里需要改为await getCurrentUser()
  const uid = getCurrentUser().uid;

  // 修正集合引用为events根集合
  const eventsRef = collection(db, "events");
  const que = query(eventsRef, where("creator", "==", uid));

  const result = await getDocs(que);

  return result;
};

export default getEvents;

2. 调整Firestore规则

修改规则,让用户只能读取/修改自己创建的事件文档(通过检查文档的creator字段):

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /events/{eventId} {
      // 允许读取、更新、删除自己创建的事件
      allow read, update, delete: if request.auth != null && resource.data.creator == request.auth.uid;
      // 允许创建事件,且创建者必须是当前登录用户
      allow create: if request.auth != null && request.auth.uid == request.resource.data.creator;
    }
  }
}

说明

  • 修正后的代码会查询events集合中所有creator字段等于当前用户uid的文档,符合你的需求。
  • 调整后的规则确保用户只能访问自己创建的事件,同时保留了权限控制的安全性。

内容的提问来源于stack exchange,提问作者Zibal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:05:27