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

Firebase Auth谷歌重定向登录iOS报Unhandled Promise Rejection错误如何处理

错误原因

这个Unhandled Promise Rejection: TypeError: Right side of assignment cannot be destructured报错触发有两个核心原因:

  • 混用了两个不同CDN源的Firebase模块:firebase-app从gstatic加载,firebase-auth从cdnjs加载,即使版本号相同,不同CDN打包的代码也可能存在内部依赖逻辑的微小差异,导致模块间调用异常。
  • 9.3.0版本的Firebase Auth存在iOS Safari兼容性已知bug:iOS Safari默认启用智能跟踪预防(ITP)机制,会限制第三方跨站存储读写,该版本的getRedirectResult内部处理登录态时,预期的返回对象在ITP限制下会变成null/undefined,内部解构操作执行失败抛出错误。
  • 额外的代码隐患:没有对getRedirectResult的返回结果做判空处理,当用户不是从第三方登录重定向回来的场景下,result会直接返回null,直接读取result.user也会触发类型错误。

修复方案

按优先级执行以下操作即可解决问题:

  1. 统一所有Firebase模块的CDN源,不要混用gstatic和cdnjs的资源,将auth模块的导入地址替换为gstatic同源地址:
import {
  getAuth,
  getRedirectResult
} from "https://www.gstatic.com/firebasejs/9.3.0/firebase-auth.js";
  1. 对getRedirectResult的返回结果新增判空逻辑,避免空值读取报错:
getRedirectResult(auth)
  .then((result) => {
    // 新增判空,非重定向场景直接跳过处理
    if (!result) return
    const user = result.user;
    // 原有业务代码
  }).catch((error) => {
    const errorCode = error.code;
    const errorMessage = error.message;
    alert(errorMessage)
  });
  1. 初始化auth实例时显式传入已创建的app实例,避免多实例场景下的绑定错误:
const auth = getAuth(app);
  1. 条件允许的情况下,将Firebase版本升级到9.6.0及以上,该版本官方已经修复了iOS Safari ITP场景下的getRedirectResult解构bug。

内容的提问来源于stack exchange,提问作者Ju Long

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:15:04