Firebase云功能:“状态”:“ INVALID_ARGUMENT”

时间:2020-05-29 17:22:06

标签: javascript firebase google-cloud-functions firebase-cli

我正在本地测试Firebase Cloud Function。当我使用here中所述的本地URL http://localhost:5001/projectName/us-central1/functionName调用此函数时:

exports.createSession = functions.https.onRequest((_req, res) => {
  res.status(200).send('TESTING');
});

该函数有效并返回字符串。

但是,当我调用此函数时:

exports.createSession = functions.https.onCall((data, context) => {
  return 'TESTING';
});

它引发错误:{"error":{"message":"Bad Request","status":"INVALID_ARGUMENT"}}

我想使用后一个功能,因为我想访问context.auth对象以检查用户Firebase身份验证。

我正在使用Firebase CLI v8.4和Node v10.20。

第二个功能使我无法正常工作吗?我不需要使用任何参数来调用它。

2 个答案:

答案 0 :(得分:2)

您正在将使用onCall的{​​{3}}与使用onRequest的{​​{3}}进行比较。可调用函数的实现与HTTP函数完全不同。我建议阅读我链接的文档,以更好地理解它们之间的区别。要点是,可调用函数遵循callable function,并且任何客户端访问都必须遵循该协议,否则可能会收到此处显示的错误。该协议的最佳实现是Firebase提供的客户端SDK-您应该使用该SDK来调用该功能。

如果您希望使用普通的HTTP库调用普通的HTTP函数,则根本不要使用callable。您可以先使用ID令牌,然后使用HTTP function将身份验证信息传递给HTTP函数。文档链接包含示例。

答案 1 :(得分:0)

答案是,您无法以与.onCall方法相同的方式调用onRequest方法,而必须从SDK中调用它。如果缺少data参数,则会引发错误:

如果调用了客户端触发器,但是请求的格式错误,例如不是JSON,字段无效或缺少数据字段,则该请求将被400 Bad Request拒绝,错误代码为INVALID_ARGUMENT

因此,即使您不需要使用该参数,也必须使用一个参数来调用它。