Firestore中如何实现用户ID与文档ID保持一致?
解决Firestore文档ID与用户UID不一致的问题
你的代码存在两个核心问题,导致文档ID和用户UID不匹配:
- 错误生成随机文档ID:
final docUser = FirebaseFirestore.instance.collection('Users').doc();不带参数的doc()会生成随机ID,并非用户的认证UID。 - 使用
add()方法:users.add(...)会自动创建带随机ID的文档,完全跳过了你指定的文档引用,这是文档ID随机的直接原因。
修正后的代码
Future<void> userSetupDone() async { FirebaseAuth auth = FirebaseAuth.instance; User? currentUser = auth.currentUser; // 先确认用户已完成登录 if (currentUser == null) { return; } String uid = currentUser.uid; String? email = currentUser.email; String? phone = currentUser.phoneNumber; String? displayName = currentUser.displayName; // 直接用用户UID作为文档ID,调用set()写入数据 await FirebaseFirestore.instance.collection('Users').doc(uid).set({ "Email": email, "Phone": phone, "Name": displayName // 可选:如果需要在文档内存储UID字段,可以添加"Uid": uid }); }
关键说明
- 指定文档ID:通过
doc(uid)明确将用户UID设置为文档ID,确保两者完全一致。 - 使用set()而非add():
set()方法会写入你指定ID的文档,而add()会自动生成随机ID,这是你之前问题的根源。 - 用户登录校验:增加
currentUser的空判断,避免未登录时出现空指针错误。
内容的提问来源于stack exchange,提问作者Alex Ali
相关产品推荐
相关产品推荐

