如何在调用Firebase的`.onCall()`方法时避免出现"Bad request"错误?

11 浏览
0 Comments

如何在调用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"

0
0 Comments

当调用Firebase的`.onCall()`方法时,出现"Bad request"错误的原因是因为没有正确使用协议规范。要解决这个问题,需要将POST请求的body包装在`data`中。

以下是问题出现的原因及解决方法的整理:

问题出现的原因:

- 调用者误解了“完全相同”的含义,并省略了答案的其他部分。在安全方面,可调用函数确实与HTTP函数相同,因为可调用函数是一个HTTP函数,在可调用客户端SDK管理的幕后执行一些额外的操作。答案列出了这些差异,这些差异对安全性没有任何影响。但是,不能仅仅将可调用函数替换为HTTP函数,并期望对现有的调用者来说一切都是相同的。

解决方法:

- 如果要在不使用客户端SDK的情况下调用可调用函数,必须遵循其协议规范。关于此的文档即将推出,但你可以在这里了解基本信息:

如何使用HTTP调用Firebase可调用函数?

对方回复:

- 没问题,很高兴你得到了你所需要的。

通过以上整理,可以得到以下文章:

## 如何解决调用Firebase的`.onCall()`方法时出现"Bad request"错误?

当调用Firebase的`.onCall()`方法时,有时会遇到"Bad request"错误。这种错误的原因是因为没有正确使用协议规范。解决这个问题的方法是将POST请求的body包装在`data`中。

问题出现的原因是调用者误解了“完全相同”的含义,并省略了答案的其他部分。在安全方面,可调用函数确实与HTTP函数相同,因为可调用函数是一个HTTP函数,在可调用客户端SDK管理的幕后执行一些额外的操作。答案列出了这些差异,这些差异对安全性没有任何影响。但是,不能仅仅将可调用函数替换为HTTP函数,并期望对现有的调用者来说一切都是相同的。

要解决这个问题,如果要在不使用客户端SDK的情况下调用可调用函数,必须遵循其协议规范。关于此的文档即将推出,但你可以在这里了解基本信息。

希望这篇文章能帮助你解决调用Firebase的`.onCall()`方法时出现"Bad request"错误的问题。

0