React Native Firebase认证后获取Firestore用户集合文档ID问询
获取Firestore中注册用户文档ID的解决方案
核心方法:通过addDoc返回值获取文档ID
调用addDoc()向Firestore添加文档时,该方法会返回一个DocumentReference对象,通过这个对象的id属性就能直接拿到新创建文档的唯一ID。
优化后的代码实现
原代码存在await与then混用、字段值格式错误({firstName}会生成嵌套对象)等问题,以下是重构后的代码,同时实现文档ID的获取:
let createUser = async (email, password, firstName, lastName) => { try { // 创建Firebase认证用户 const userCredential = await firebase.auth().createUserWithEmailAndPassword(email, password); const currentUser = userCredential.user; // 发送邮箱验证 await currentUser.sendEmailVerification({ handleCodeInApp: true, url: "https://hpom-ca649.firebaseapp.com", }); alert(alertVerification); // 修正原代码的alert传参错误 // 添加用户信息到Firestore并获取文档ID const userDocRef = await addDoc(collection(db, 'users'), { first: firstName, // 直接传入字段值,避免生成嵌套对象 last: lastName, email: email, uid: currentUser.uid // 建议添加认证用户的uid,方便后续关联查询 }); // 获取并使用文档ID const userDocId = userDocRef.id; console.log("用户文档ID:", userDocId); // 可根据需求将文档ID存储到前端状态、用户认证信息等位置 } catch (error) { alert(error.message); console.error(error); } }
关键说明
- 字段值修正:原代码中
first: {firstName}的写法会将字段值设置为{firstName: "传入值"}的嵌套对象,改为直接传入firstName才能得到正确的字符串值。 - 错误处理优化:统一使用
try/catch处理所有异步操作的错误,比嵌套then/catch更清晰易维护。 - 关联用户与文档:在Firestore文档中存储认证用户的
uid,后续可通过uid快速查询对应用户文档,也能通过文档ID关联到认证用户。
内容的提问来源于stack exchange,提问作者Ulaş Kara
相关产品推荐
相关产品推荐

