React Native Firebase配置正常却访问Firestore提示权限拒绝问题求助
你不需要在firebase.js中额外添加Web端类型的配置,现有原生端的plist、json配置已经足够支撑Firestore运行,问题核心是访问Firestore时请求未携带有效的Firebase Auth身份信息,导致规则中的request.auth != null判断不通过。
可按照以下步骤逐一排查:
- 确认是否集成了Firebase Authentication服务
Firebase Auth是独立服务,你此前使用的Analytics、Crashlytics不需要依赖Auth能力,所以如果项目中没有单独集成并启用Auth、也没有完成用户登录流程的话,request.auth会始终为null,自然无法通过规则校验。 - 调整Firestore请求的触发时机
如果已经集成了Auth,要确保你发起Firestore读写请求的时机是在用户登录完成、Auth状态确认生效之后。不要在App初始化阶段、Auth实例还未完成状态同步时就发起请求,你可以通过Auth状态监听来控制请求逻辑,参考示例:
// 以react-native-firebase库为例,官方Web SDK逻辑基本一致 import auth from '@react-native-firebase/auth'; import firestore from '@react-native-firebase/firestore'; auth().onAuthStateChanged(user => { if (user) { // 确认用户已登录后再发起Firestore请求 firestore().collection('receipts').get() .then(res => console.log('请求成功', res)) .catch(e => console.log('请求失败', e)); } else { console.log('当前无登录用户'); } })
- 校验Firebase实例初始化逻辑
确认你项目中的Auth和Firestore使用的是同一个Firebase App实例初始化,不要创建多个独立的Firebase App实例,否则身份信息无法跨服务同步。 - 控制台规则验证
你可以登录Firebase控制台,进入Firestore的规则页面,使用「规则游乐场」功能,模拟已登录的用户身份访问receipts路径下的资源,确认规则本身可以正常通过校验,排除规则配置的隐藏问题。
内容的提问来源于stack exchange,提问作者cierech
相关产品推荐
相关产品推荐

