Firebase调用setDoc()无法创建文档,auth创建用户后写入对应uid文档无响应
问题排查与解决步骤
- 第一步:添加异常捕获逻辑,定位具体报错
现有代码未做异常捕获,setDoc执行抛出的错误无法被感知,会表现为流程无响应。调整代码加入try catch结构,查看错误详情:try { const currentUser = await auth.createUserWithEmailAndPassword(email, pass); console.log('user registered') await setDoc(doc(db, "users", currentUser.user.uid),{ forname: "Peter", surname: "Parker" }) console.log('user profile added') dispatch({type:'USER_REG', payload: currentUser}); } catch (err) { console.error('执行错误: ', err) } - 第二步:验证Firestore安全规则配置
90%的类似问题由安全规则限制导致,打开Firebase控制台进入Firestore数据库的「规则」页面,确认规则允许已认证用户写入对应uid的users文档,测试阶段可临时使用以下规则验证:
注意:以上为测试用规则,正式上线前请根据业务需求收紧权限rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; } } } - 第三步:检查Firestore实例初始化是否正确
确认你的db实例初始化代码没有遗漏参数,示例正确写法如下:import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore"; // 替换为你项目的firebase配置 const firebaseConfig = { apiKey: "xxx", authDomain: "xxx", projectId: "xxx", storageBucket: "xxx", messagingSenderId: "xxx", appId: "xxx" }; const app = initializeApp(firebaseConfig); const db = getFirestore(app); // 必须传入初始化完成的app实例 - 第四步:排查网络环境问题
部分代理、VPN工具会拦截Firebase的API请求,导致请求长期处于pending状态。可尝试关闭代理后测试,或打开浏览器控制台的「网络」面板,查看发往firestore.googleapis.com的请求是否正常。
内容的提问来源于stack exchange,提问作者SlugLord
相关产品推荐
相关产品推荐

