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

Firebase Cloud Functions 如何从HTTPS可调用函数抛出Auth Error?

我能否从HTTPS可调用函数中抛出Auth Error?

不能直接抛出Auth SDK返回的原生错误。
Firebase HTTPS可调用函数的运行时要求,所有需要传递给客户端的自定义错误必须是functions.https.HttpsError类的实例。如果你直接抛出Auth SDK返回的错误,运行时会将其判定为未捕获的内部异常,最终只会给客户端返回泛化的internal类型错误,不会携带原Auth错误的错误码、描述等信息,客户端无法识别具体的错误类型。

你不想每次都手动判断错误码再构造HttpsError的话,可以封装一个通用的错误转换工具函数,简化写法:

// 提前定义Auth错误和Https错误码的映射规则,可按需扩展
const authCodeToHttpsCode = new Map([
  ['auth/email-already-exists', 'invalid-argument'],
  ['auth/user-not-found', 'unauthenticated'],
  ['auth/wrong-password', 'unauthenticated'],
  ['auth/id-token-expired', 'unauthenticated'],
  ['auth/invalid-email', 'invalid-argument']
])

// 转换工具函数
function convertAuthToHttpsError(authErr) {
  const httpsCode = authCodeToHttpsCode.get(authErr.code) || 'internal'
  // 第三个参数可以携带原错误码,方便客户端直接识别
  return new functions.https.HttpsError(httpsCode, authErr.message, {
    originalAuthCode: authErr.code
  })
}

封装完成后,你在业务代码里就可以直接用简化写法:

exports.signUp = functions
  .region("us-central1")
  .runWith({ memory: "2GB", timeoutSeconds: 120 })
   .https.onCall(async (data, context) => {
      try {
        // 调用Auth SDK的业务逻辑
        // ...
      } catch (err) {
        if (err.code?.startsWith('auth/')) {
          throw convertAuthToHttpsError(err)
        }
        // 其他类型错误的处理逻辑
        // ...
      }
   })

这样既符合HTTPS可调用函数的错误规范,也不需要每次都重复写构造HttpsError的冗长代码,客户端也能从返回的错误附加信息里拿到原生的Auth错误码做对应的交互处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:27:06