You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript React下MongoDB Realm登录后app.currentUser返回null问题

问题根因

  • 异步逻辑混用async/await和嵌套then,时序控制存在隐患
  • MongoDB Realm SDK的全局app.currentUser状态更新晚于app.logIn方法的resolve时机,登录成功后会延迟1个微任务周期才会更新全局状态

解决方案

优先直接使用login方法返回的有效用户实例执行后续逻辑(包括写入自定义用户数据),可以完全规避全局状态更新延迟的问题。如果确实需要依赖app.currentUser,补充1个事件周期的等待即可。

修正后代码

async function register(app: any, userDetails: any) {
  try {
    // 完成账号注册
    await app.emailPasswordAuth!.registerUser(
      userDetails.email,
      userDetails.password,
    );
    // 登录获取已认证的用户实例
    const user = await login(app, userDetails.email, userDetails.password);

    // 若必须使用全局app.currentUser,打开下方注释等待状态更新即可
    // await new Promise(resolve => setTimeout(resolve, 0));
    // console.log(app.currentUser); // 此时已不为null

    // 写入自定义用户数据示例,直接用返回的user实例操作,无需依赖全局状态
    const mongoClient = user.mongoClient("mongodb-atlas");
    await mongoClient.db("你的数据库名").collection("你的用户集合名").insertOne({
      userId: user.id,
      nickname: userDetails.nickname,
      avatar: userDetails.avatar,
      // 其他自定义字段
    });

  } catch (e) {
    console.error("注册流程出错", e);
  }
}

原有登录函数无需修改,逻辑可正常复用。

内容的提问来源于stack exchange,提问作者David McIntyre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:15:05