如何在调用Firebase的`.onCall()`方法时避免出现"Bad request"错误?
如何在调用Firebase的`.onCall()`方法时避免出现"Bad request"错误?
我刚刚升级到使用Firebase Cloud Functions v1.x版本。根据这个答案的说法:
可调用函数与HTTP函数完全相同。
基于此,我尝试将之前1.x版本的模拟代码转换为以下代码:
export const myHttpAction = functions.https.onCall(async (data, context) => { console.log(context.auth); try { const result = await myHttpActionWorker(data); return { status: 'OK' }; } catch (err) { console.error(err); return { status: 'Server error' }; } });
但是,当我使用相同的数据将其提交到我的端点/myHttpAction
时,我得到以下结果:
{
"error": {
"status": "INVALID_ARGUMENT",
"message": "Bad Request"
}
}
我不确定为什么请求是“错误的”,因为它完全相同,可调用函数也是“完全相同”的。有什么想法吗?
我的package.json文件指定了"firebase-functions": "^1.0.1"
。
当调用Firebase的`.onCall()`方法时,出现"Bad request"错误的原因是因为没有正确使用协议规范。要解决这个问题,需要将POST请求的body包装在`data`中。
以下是问题出现的原因及解决方法的整理:
问题出现的原因:
- 调用者误解了“完全相同”的含义,并省略了答案的其他部分。在安全方面,可调用函数确实与HTTP函数相同,因为可调用函数是一个HTTP函数,在可调用客户端SDK管理的幕后执行一些额外的操作。答案列出了这些差异,这些差异对安全性没有任何影响。但是,不能仅仅将可调用函数替换为HTTP函数,并期望对现有的调用者来说一切都是相同的。
解决方法:
- 如果要在不使用客户端SDK的情况下调用可调用函数,必须遵循其协议规范。关于此的文档即将推出,但你可以在这里了解基本信息:
对方回复:
- 没问题,很高兴你得到了你所需要的。
通过以上整理,可以得到以下文章:
## 如何解决调用Firebase的`.onCall()`方法时出现"Bad request"错误?
当调用Firebase的`.onCall()`方法时,有时会遇到"Bad request"错误。这种错误的原因是因为没有正确使用协议规范。解决这个问题的方法是将POST请求的body包装在`data`中。
问题出现的原因是调用者误解了“完全相同”的含义,并省略了答案的其他部分。在安全方面,可调用函数确实与HTTP函数相同,因为可调用函数是一个HTTP函数,在可调用客户端SDK管理的幕后执行一些额外的操作。答案列出了这些差异,这些差异对安全性没有任何影响。但是,不能仅仅将可调用函数替换为HTTP函数,并期望对现有的调用者来说一切都是相同的。
要解决这个问题,如果要在不使用客户端SDK的情况下调用可调用函数,必须遵循其协议规范。关于此的文档即将推出,但你可以在这里了解基本信息。
希望这篇文章能帮助你解决调用Firebase的`.onCall()`方法时出现"Bad request"错误的问题。