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

Firebase signInWithRedirect跳转登录后getRedirectResult始终返回null问题求助

Firebase signInWithRedirect跳转登录后getRedirectResult始终返回null问题求助

兄弟,我来帮你捋捋这个问题!你用Firebase的signInWithRedirect跳转登录后,getRedirectResult一直返回null,大概率是这几个地方出问题了,咱们一个个排查:

  • Firebase Auth实例初始化时机不对:你得确保auth实例是在组件挂载前就完全初始化好的全局单例,要是getRedirectResult在auth还没准备好的时候就调用了,那肯定拿不到跳转后的结果。比如别在组件内部临时创建auth实例,要在项目入口或者专门的Firebase配置文件里初始化好再导入使用。

  • 浏览器隐私设置影响:现在很多浏览器默认会阻止第三方Cookie,Firebase的跳转登录依赖第三方Cookie来保存会话信息,要是这个开关开着,跳转回来后Firebase就拿不到登录状态,自然getRedirectResult返回null。你可以先试试关闭浏览器的“阻止第三方Cookie”设置,测试下能不能拿到结果。

  • 代码执行时机与路由干扰:你的useEffect依赖只有navigate,但如果跳转回来后,路由变化导致组件还没执行checkRedirectResult就被提前导航走了,也会出问题。另外,你可以试试把auth也加入useEffect的依赖数组,确保auth实例变化时能重新检查结果。还有个更稳妥的办法是结合onAuthStateChanged监听用户状态,这个方法能实时捕获用户登录状态,有时候比单独用getRedirectResult更可靠,比如:

useEffect(() => {
  // 用onAuthStateChanged监听用户状态
  const unsubscribe = onAuthStateChanged(auth, (user) => {
    if (user) {
      console.log("已登录用户:", user);
      navigate("/");
    }
  });

  const checkRedirectResult = async () => {
    try {
      const result = await getRedirectResult(auth);
      console.log("Auth跳转结果:", result);
    } catch (error) {
      console.error("Auth错误:", error);
      toast.error("登录失败");
    }
  };

  checkRedirectResult();

  // 组件卸载时取消监听
  return unsubscribe;
}, [navigate, auth]);
  • Firebase SDK版本问题:有时候不同版本的Firebase Auth SDK会有一些小bug,你可以检查下自己的SDK版本,看看是不是最新版,或者有没有已知的相关问题。

还有个小细节,你在loginWithGoogle里调用signInWithRedirect后,不需要手动做导航,等Firebase跳转回来后,再由getRedirectResult或者onAuthStateChanged处理后续的页面跳转就好。

备注:内容来源于stack exchange,提问作者Vedant Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:05:30