Phone Verification Auth验证通过仍无法访问Firestore数据权限问题
解决Firestore "Missing or insufficient permissions" 权限问题(已认证但无法访问)
问题背景
- 报错信息:
FirebaseError: Missing or insufficient permissions - 当前配置的Firestore规则:
service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null; } } }
- 已确认的现状:
- 调用数据库的函数中可正常打印用户UID,Authentication功能正常
- Firestore规则模拟器测试运行正常
- 数据高度敏感,无法使用开放测试规则
排查与解决步骤
确保Firestore请求在认证状态初始化后执行
客户端可能存在Firestore请求先于Auth状态同步完成的情况,即使后续能获取到UID,但请求发起时request.auth仍为null。需将Firestore查询放在Auth状态回调内:firebase.auth().onAuthStateChanged(user => { if (user) { // 认证状态确认后再执行Firestore操作 firebase.firestore().collection('target-collection').get() .then(snapshot => { /* 处理数据逻辑 */ }) .catch(err => console.error(err)); } });验证Auth与Firestore实例的一致性
确认代码中使用的Auth实例和Firestore实例来自同一个Firebase应用初始化对象,多实例会导致认证状态无法共享,引发权限校验失败。刷新并验证用户ID Token
用户的ID Token可能过期或失效,强制刷新并验证token有效性:user.getIdToken(true) // 强制刷新token .then(token => { console.log('当前有效Token:', token); // 可在Firebase控制台的Token验证工具中校验token合法性 });若token无效,需让用户重新登录获取新token。
确认规则已成功部署到生产环境
检查Firebase控制台的Firestore规则页面,确认当前生效的规则是修改后的版本,避免出现部署失败、未触发部署导致线上仍使用旧规则的情况。核对请求的资源路径
确认代码中请求的Firestore文档/集合路径与规则匹配的路径完全一致,避免因拼写错误、层级错误导致规则匹配失败。服务器端请求的特殊校验
若在Cloud Functions等服务器端发起请求,需确保使用正确的认证方式:要么使用服务账号权限,要么通过传递用户ID Token进行身份验证,不能依赖客户端的认证状态。
内容的提问来源于stack exchange,提问作者Nikhil Chauhan
相关产品推荐
相关产品推荐

