如何在 Firebase 可调用云函数上抛出错误?

Pie*_*ier 17 node.js firebase google-cloud-functions

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

{"error":{"status":"INTERNAL","message":"INTERNAL"}}
Run Code Online (Sandbox Code Playgroud)

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

Unhandled error Error: Unknown error status: auth/invalid-email
Run Code Online (Sandbox Code Playgroud)

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

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);
    });
}
Run Code Online (Sandbox Code Playgroud)

如图所示我试着使用throw functions.https.HttpsError这是什么文档建议

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

我使用了 try/catch withawait而不是使用then()and catch()。结果一样。功能控制台仍然告诉我错误没有被处理,这是荒谬的。

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

Dou*_*son 15

看起来您正在尝试逐字传递来自 Admin SDK 的错误代码,但这不是有效的策略。仔细阅读文档 - 它会将您发送到HttpsErrorAPI 文档以查找可发送的有效错误代码列表。该代码属性链接FunctionsErrorCode这表明有效代码列表:

“好的” | “取消” | “未知” | "无效参数" | “逾期” | “未找到” | “已经存在” | “权限被拒绝” | “资源枯竭” | “失败的前提” | “中止” | “超出范围” | “未实施” | “内部” | “不可用” | “数据丢失” | “未经认证”

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

  • 由于上面的链接是 404,请查看以下链接:https://cloud.google.com/functions/docs/monitoring/error-reporting (2认同)
  • https://firebase.google.com/docs/reference/functions/common_providers_https#functionserrorcode https://firebase.google.com/docs/functions/callable#handle_errors (2认同)