Mongo Realm React Native登录后app.currentUser返回空对象如何解决
问题原因
你遇到的不是配置错误,是Realm JS SDK返回的用户、凭证实例为非普通JS对象,内部大量属性设为不可枚举,React Native的console.log做JSON序列化时会忽略不可枚举属性,同时新版SDK的用户实例做了Proxy封装,直接打印完整对象就会显示为空。功能可以正常运行就是实例本身有效的直接证明。
解决方法
- 验证用户属性存在:不要直接打印完整对象,单独打印你需要的具体字段即可拿到有效值
// 示例 console.log('登录用户ID', newUser.id); console.log('登录用户邮箱', newUser.profile.email); console.log('全局当前用户ID', app.currentUser?.id); - 存储用户信息:不要直接存储完整的
newUser实例,手动提取你需要的字段后再存入安全存储和应用状态const signIn = async (email, password) => { const creds = Realm.Credentials.emailPassword(email, password); const newUser = await app.logIn(creds); // 提取需要的字段 const userMeta = { id: newUser.id, email: newUser.profile.email, accessToken: newUser.accessToken, refreshToken: newUser.refreshToken }; setUser(userMeta); // 后续将userMeta存入安全存储即可 }; - 认证状态切换判断:优先使用Realm提供的全局用户监听API,比你自己维护的存储状态更准确,避免token过期、退出登录等场景的状态不同步问题
useEffect(() => { // 监听应用用户状态变化 const listener = app.addListener(() => { if (app.currentUser) { // 已登录逻辑,跳转到应用内页面 } else { // 未登录逻辑,跳转到登录注册页 } }); // 组件卸载时移除监听 return () => app.removeListener(listener); }, [])
内容的提问来源于stack exchange,提问作者Maya
相关产品推荐
相关产品推荐

