React Firebase用户文档无法创建:无报错却未生成文档求助
Firebase注册后无法创建users集合文档的排查与解决
我在实现用户注册功能时,已成功调用createUserWithEmailAndPassword创建账号,也能将图片上传至存储并更新用户认证信息的头像,但尝试创建users集合存储完整用户信息时,setDoc执行后无报错,却始终生成不了对应的文档。代码如下:
//CREATE USER ACCOUNT const user = await createUserWithEmailAndPassword( auth, data.Email, data.Password ); //UPLOAD IMAGE const storageRef = ref(storage, `${data.Email}`); if (profileIcon != undefined) { const uploadTask = uploadBytesResumable(storageRef, profileIcon); uploadTask.on( "state_changed", (error) => { setError(true); console.log(error); }, () => { getDownloadURL(uploadTask.snapshot.ref).then(async (downloadURL) => { await updateProfile(user.user, { displayName: `${data.FirstName} ${data.LastName}`, photoURL: downloadURL, }); await setDoc(doc(db, "users", user.user.uid), { uid: user.user.uid, displayName: `${data.FirstName} ${data.LastName}`, firstName: data.FirstName, lastName: data.LastName, email: data.Email, photoUrl: downloadURL, }); }); } ); }
可能的原因及解决办法
Firebase安全规则限制
检查Firestore的安全规则,默认规则会阻止未授权的写入操作。开发阶段可临时设置允许认证用户写入(上线前务必修改为严格规则):rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null; } } }同时确认
user.user的认证状态有效,可在setDoc前打印console.log(user.user.uid)验证。异步嵌套的错误未被捕获
原代码在getDownloadURL的.then回调里使用async/await,但未捕获Promise错误,导致出错时无日志输出。修改为async回调+try/catch捕获错误:uploadTask.on( "state_changed", (error) => { setError(true); console.log(error); }, async () => { try { const downloadURL = await getDownloadURL(uploadTask.snapshot.ref); await updateProfile(user.user, { displayName: `${data.FirstName} ${data.LastName}`, photoURL: downloadURL, }); await setDoc(doc(db, "users", user.user.uid), { uid: user.user.uid, displayName: `${data.FirstName} ${data.LastName}`, firstName: data.FirstName, lastName: data.LastName, email: data.Email, photoUrl: downloadURL, }); } catch (err) { setError(true); console.log("写入文档出错:", err); } } );路径或UID问题
确认集合名users大小写与Firestore控制台一致(Firestore路径大小写敏感),同时打印user.user.uid验证是否为有效值,避免因UID为空或错误导致文档创建失败。控制台缓存问题
Firestore控制台可能存在缓存,刷新页面后再检查文档是否已创建。
内容的提问来源于stack exchange,提问作者Mat
相关产品推荐
相关产品推荐

