如何在Google Cloud功能中获取原始请求正文?

Pet*_*ter 12 javascript firebase google-cloud-functions

我需要原始请求主体能够SHA-1消化它以验证Facebook webhook X-Hub-Signature标头,该标头随请求一起传递给我的Firebase功能(在Google Cloud Functions上运行).

问题在于,在这种情况下(带有Content-Type: application/json标题),GCF会自动解析使用bodyParser.json()该数据的主体消耗流中的数据(意味着它不能再次在Express中间件链中使用),并且只提供解析后的javascript对象req.body.原始请求缓冲区被丢弃.

我试图提供一个Express应用程序functions.https.onRequest(),但这似乎是作为子应用程序运行或者已经解析了请求主体的东西,就像你传递一个普通的请求 - 响应回调一样onRequest().

有没有办法禁用GCF为我解析身体?或者我可以以某种方式指定我自己的verify回调bodyParser.json()?或者还有其他方式吗?

PS:我一周前第一次联系Firebase支持,但由于缺乏响应,我现在在这里尝试.

Iva*_*uev 15

现在你可以从中获取原始体req.rawBody.它回来了Buffer.有关详细信息,请参阅文档

感谢Nobuhito Kurose在评论中发布此内容.

  • 如果从 `functions.https.Request` 导入,Typescript 将识别 rawBody,但如果从 `functions.Request` 导入,则它将无法识别该字段 (6认同)

Jam*_*els 5

不幸的是,默认中间件当前无法提供获取原始请求正文的方法。请参阅:访问 HTTP 函数中未解析的 JSON 正文 (#36252545)

  • 人们对此进行了讨论(超出了公开范围),包括我在内的几位 Google 员工都对此感到痛苦。我无法承诺时间表,但这必须解决,因为网络挂钩是我们的关键故事之一。不幸的是,它没有进入测试版。 (3认同)