配置useFirestoreForProfile、userProfile为users集合后未显示对应用户数据
react-redux-firebase 登录态下users集合profile数据读取异常排查
问题现象
基于react-redux-firebase实现登录态用户数据读取时,控制台可正常获取Firebase基础认证信息,已配置useFirestoreForProfile: true、指定关联用户集合为users,但redux中的state.firebase.profile始终无法匹配填充users集合下的对应用户文档数据。
当前已确认的项目配置:
- Store初始化时已在redux-thunk中注入
getFirebase、getFirestore扩展参数 - 导航栏组件通过connect映射
state.firebase.auth、state.firebase.profile至组件props - 已开启
attachAuthIsReady配置、传入createFirestoreInstance实例
排查方向
- 校验根组件的Provider挂载顺序
确保react-redux提供的Store容器Provider为最外层组件,ReactReduxFirebaseProvider作为Provider的子组件存在,两个Provider的层级不能颠倒。若挂载顺序颠倒,rrf实例无法正常向store派发profile更新动作,配置的attachAuthIsReady也无法生效。 - 确认Firebase实例初始化完成度
传入rrfProps的firebase参数,必须是已经完成Auth、Firestore等核心服务初始化的完整实例;同时确认createFirestoreInstance是通过对应工具方法生成的有效Firestore实例,而非后续异步赋值的空值。避免出现先传入未初始化的firebase对象、后续再补充初始化服务的情况,这类时序问题会直接打断rrf对用户profile的自动订阅流程。 - 核对users集合的文档匹配规则
react-redux-firebase默认以当前登录用户的auth.uid作为文档ID,匹配读取users/{uid}路径下的文档。若集合内的文档ID为邮箱、手机号等非uid字段,会出现匹配失败、profile无数据的问题,需确认目标用户的文档ID与登录态返回的uid完全一致。 - 检查Firestore安全规则权限
确保当前登录用户对对应路径的users/{uid}文档拥有读权限。若安全规则限制了已登录用户读取自身关联文档的权限,rrf发起的数据请求会被直接拦截,无法返回集合内的用户数据。 - 校验根reducer的挂载路径
确认根reducer中已引入react-redux-firebase提供的firebaseReducer,且将其挂载在state的firebase键下,和组件mapStateToProps中的取值路径保持一致。若reducer挂载路径错误,即使rrf成功获取了profile数据,也无法映射到组件props中。
注意:开启
useFirestoreForProfile后,应用首次加载阶段profile初始值为空对象,需等待auth状态校验完成、profile请求返回后才会填充对应数据,不要在组件首次渲染时直接访问profile的深层属性引发报错。
内容的提问来源于stack exchange,提问作者Alberto Ornelas
相关产品推荐
相关产品推荐

