Firebase Web 客户端重写了 https.onRequest 函数返回的错误消息,如何防止?
Posted
技术标签:
【中文标题】Firebase Web 客户端重写了 https.onRequest 函数返回的错误消息,如何防止?【英文标题】:Firebase web client rewrites the error message returned by an https.onRequest function, how to prevent that? 【发布时间】:2019-08-11 19:26:04 【问题描述】:我无法检索从“https.onRequest”函数发回的消息。 firebase客户端根据错误码重写消息,我无法恢复原来发送的body或JSON。
关于 Firebase 函数:
exports.auth = functions.https.onRequest( (request, response) =>
cors(request, response, async () =>
try
return response.status(200).json(
data: "Hello"
);
catch (error)
return response
.status(403)
.send('User not activated')
);
);
如果我在 chrome 开发控制台中分析请求的返回,一切正常: 正文(response.send):“用户未激活”
但在正面
auth: function (email, password)
var register = firebaseFunctions.httpsCallable('auth');
return register(
email: email,
password: password
)
.then(async (result) =>
// ...
)
.catch((err) =>
throw err
);
在我的 catch 语句中:
err.message > permission-denied
err.details > undefined
err.code > 403
我不知道如何恢复我发送的“用户未激活”消息,这将使我能够更准确地处理 403 错误代码:用户无法连接,因为它未激活。
非常感谢!
【问题讨论】:
【参考方案1】:您正在混淆可调用和常规 HTTP 类型函数。这根本行不通。
在您的函数方面,您使用 onRequest 回调将函数声明为常规 HTTP type function。这意味着您需要使用 HTTP 客户端库来访问它。
在您的客户端,您尝试使用 Functions 客户端 SDK 以 callable type function 的形式调用该函数。这要求您使用 onCall 回调声明您的函数,而不是您现在使用的 onRequest 回调。可调用对象有一个由客户端 SDK 实现的 special protocol。
客户端和服务器必须匹配;现在他们没有。如果您想使用可调用函数,请按照链接文档中的所有说明进行操作。如果你想要一个常规的 HTTP 类型的函数,你不能使用 Functions 客户端 SDK。您必须使用其他一些 HTTP 客户端库。
【讨论】:
以上是关于Firebase Web 客户端重写了 https.onRequest 函数返回的错误消息,如何防止?的主要内容,如果未能解决你的问题,请参考以下文章
Web Firebase Cloud Messaging - 如何从客户端订阅主题? [复制]