如何在 Firebase 可调用云函数上引发错误?
Posted
技术标签:
【中文标题】如何在 Firebase 可调用云函数上引发错误?【英文标题】:How to throw an error on a Firebase callable cloud function? 【发布时间】: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);
。它适用于创建用户。
【参考方案1】:
您似乎正试图逐字传递来自 Admin SDK 的错误代码,但这不是一个有效的策略。仔细阅读文档 - 它会将您发送到 API documentation for HttpsError 以查找有效发送的错误代码列表。 code 属性链接到 FunctionsErrorCode,它显示了有效代码列表:
“好的” | “取消” | “未知” | “无效参数” | “超过最后期限” | “未找到” | “已经存在” | “权限被拒绝” | “资源枯竭” | “失败的前提条件” | “中止” | “超出范围” | “未实现” | “内部” | “不可用” | “数据丢失” | “未经身份验证”
Admin SDK 为您提供“auth/invalid-email”,这在此处无效。您将不得不将其转换为有效代码之一。也许“无效参数”可能是合适的。这将被进一步转换为数字 HTTP 响应代码,您将在客户端收到该代码。
【讨论】:
谢谢,是的,就是这样。控制台或返回给客户端的错误都没有提及这些,这真是太神奇了。 这有点像错误消息“未知错误状态”所暗示的。但它可能更清楚,这在项目 GitHub 中的功能请求中是合理的:github.com/firebase/firebase-functions 显然他们不希望通过 Github 请求功能,并要求在这里进行:firebase.google.com/support/contact/bugs-features 由于上面的链接是404s,请查看以下链接:cloud.google.com/functions/docs/monitoring/error-reporting以上是关于如何在 Firebase 可调用云函数上引发错误?的主要内容,如果未能解决你的问题,请参考以下文章
firebase - 从可调用云函数访问数据库时应用检查失败