如何获取Firestore中创建文档的用户ID?解决帖子无关联用户问题
Firestore帖子关联用户ID的实现方案
要给帖子关联创建者的用户ID,你可以通过Firebase Auth获取当前登录用户的uid,并在创建文档时可选添加该字段,具体步骤如下:
1. 获取当前认证用户的UID
通过Firebase Auth的getAuth().currentUser可以拿到当前登录的用户实例,从中提取uid字段。如果用户未登录,currentUser会返回null。
2. 创建帖子时可选添加UID字段
修改你的代码,仅当用户存在时才将uid加入文档数据:
import { getAuth } from "firebase/auth"; import { addDoc, collection } from "firebase/firestore"; const auth = getAuth(); const currentUser = auth.currentUser; const docRef = await addDoc(collection(db, "posts"), { content: "foo", // 仅当用户已登录时添加uid字段,未登录则自动忽略 ...(currentUser && { uid: currentUser.uid }) });
这样处理后,登录用户创建的帖子会带上uid,未登录用户创建的帖子则不会包含该字段,完全符合你“无法保证所有文档都关联用户”的需求。
3. 安全规则加固(可选)
为了防止恶意客户端伪造uid或违规创建文档,建议配置Firestore安全规则:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /posts/{post} { // 允许登录用户创建带uid的帖子,或未登录用户创建不带uid的帖子 allow create: if (request.auth != null && request.resource.data.uid == request.auth.uid) || !('uid' in request.resource.data); // 读取规则可根据业务需求调整,比如允许所有人读取 allow read: if true; } } }
这条规则确保:登录用户只能创建属于自己uid的帖子,未登录用户创建的帖子不能包含uid字段,从根源上保证数据的合法性。
内容的提问来源于stack exchange,提问作者JobHunter69
相关产品推荐
相关产品推荐

