【问题标题】:How to throw an error on a Firebase callable cloud function?如何在 Firebase 可调用云函数上引发错误?
【发布时间】:2020-05-29 12:46:04
【问题描述】:

我正在尝试使用可调用的云函数在 Firebase 上创建一个新用户。每当出现错误(例如:电子邮件无效)时,无论我做什么,该函数都会向我的 Firebase 应用返回相同的神秘错误:

{"error":{"status":"INTERNAL","message":"INTERNAL"}}

在 Firebase 控制台中,我也得到了这个:

Unhandled error Error: Unknown error status: auth/invalid-email

这没有多大意义,因为我实际上是在处理错误。这是云函数的代码:

exports.createUser = (data, context) => {
    return admin.auth().createUser({
        email: data.email,
        password: data.password
    }).catch((error) => {
        throw new functions.https.HttpsError(error.errorInfo.code, error.errorInfo.message);
    });
}

如图所示,我尝试使用 throw functions.https.HttpsError,这就是 documentation suggests

我也尝试过return functions.https.HttpsError 甚至抛出我自己的错误并得到相同的结果。

我使用了 await 的 try/catch,而不是使用 then()catch()。结果相同。功能控制台仍然告诉我错误没有得到处理,这是荒谬的。

那么在使用可调用云函数时,如何向我的用户抛出正确的错误?

【问题讨论】:

  • 这看起来不像是使用 Firebase CLI 进行部署的云函数的正确定义。根据您链接的相同文档,您应该有一个如下所示的导出:exports.createUser = functions.https.onCall()
  • 这只是功能。这就是它的导出方式exports.createUser = functions.https.onCall(createUser);。它适用于创建用户。

标签: node.js firebase google-cloud-functions


【解决方案1】:

您似乎正试图逐字传递来自 Admin SDK 的错误代码,但这不是一个有效的策略。仔细阅读文档 - 它会将您发送到 API documentation for HttpsError 以查找有效发送的错误代码列表。 code 属性链接到 FunctionsErrorCode,它显示了有效代码列表:

“好的” | “取消” | “未知” | “无效参数” | “超过最后期限” | “未找到” | “已经存在” | “权限被拒绝” | “资源枯竭” | “失败的前提条件” | “中止” | “超出范围” | “未实现” | “内部” | “不可用” | “数据丢失” | “未经身份验证”

Admin SDK 为您提供“auth/invalid-email”,这在此处无效。您将不得不将其转换为有效代码之一。也许“无效参数”可能是合适的。这将被进一步转换为数字 HTTP 响应代码,您将在客户端收到该代码。

【讨论】:

猜你喜欢
  • 2020-11-17
  • 2020-07-07
  • 2021-08-29
  • 2022-01-03
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2019-09-25
相关资源
最近更新 更多