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

Firebase signInWithRedirect失效求助:getRedirectResult无输出

问题原因分析

signInWithRedirect的工作机制和signInWithPopup完全不同:调用signInWithRedirect后,浏览器会直接跳转到谷歌的授权页面,当前页面的JS执行上下文会被销毁,所以await signInWithRedirect之后的代码(包括Check 2、Check 3的打印)根本没有机会运行——这就是你看不到这些日志的核心原因。

而signInWithPopup是通过弹窗完成授权,当前页面的JS上下文不会中断,所以后续代码能正常执行。

解决方案

你需要把获取跳转结果的逻辑和触发跳转的逻辑分开:

  1. 触发跳转的函数只负责启动登录流程:
const signInWithGoogle = async () => {
  try {
    console.log("Check 1");
    await signInWithRedirect(auth, googleAuthprovider);
    // 这里之后的代码不会执行,因为页面即将跳转
  } catch (e) {
    console.log(e.message.slice(10));
  }
};
  1. 在页面初始化时(比如组件挂载、DOM加载完成后),单独调用getRedirectResult来获取授权结果:
// 以React为例,用useEffect在组件挂载时检查
useEffect(() => {
  const fetchRedirectResult = async () => {
    try {
      const result = await getRedirectResult(auth);
      console.log("Check 3");
      if (result) {
        console.log(result.user);
      }
    } catch (e) {
      console.log(e.message.slice(10));
    }
  };

  fetchRedirectResult();
}, []);

// 如果是普通JS项目,放在DOMContentLoaded事件里
document.addEventListener('DOMContentLoaded', async () => {
  try {
    const result = await getRedirectResult(auth);
    console.log("Check 3");
    if (result) {
      console.log(result.user);
    }
  } catch (e) {
    console.log(e.message.slice(10));
  }
});
额外注意事项
  • 确保你在Firebase控制台和谷歌开发者平台都配置了正确的重定向URI,必须和你的应用域名完全匹配,否则授权后无法跳回应用,getRedirectResult也拿不到结果。
  • 如果用户在授权过程中取消登录,getRedirectResult会返回null,记得处理这种情况。

内容的提问来源于stack exchange,提问作者Peter Malik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:45:33