Firebase 云函数:"status":"INVALID_ARGUMENT"

Firebase Cloud Functions: "status":"INVALID_ARGUMENT"

我正在本地测试 Firebase 云函数。当我使用本地 URL http://localhost:5001/projectName/us-central1/functionName 调用此函数时,如 here:

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

函数有效,它 returns 字符串。

然而,当我调用这个函数时:

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。

我从第二个函数中缺少什么来让它工作?我没有用任何参数调用它,因为我不需要。

您正在比较 callable function using onCall to an HTTP function using onRequest. Callable functions are implemented very differently than HTTP functions. I suggest reading over the documentation I linked in order to better understand the difference. The main point is that callable functions follow a specific protocol,并且任何客户端访问都必须遵循该协议,否则可能会收到您在此处显示的错误。该协议的最佳实现是 Firebase 提供的客户端 SDK - 您应该使用它来调用函数。

如果您希望使用常用的 HTTP 库调用普通的 HTTP 函数,则根本不要使用可调用函数。您可以使用 ID 令牌手动将身份验证信息传递给 HTTP 函数,然后 verify it using the Firebase Admin SDK。文档 link 有示例。

答案是您不能像调用onRequest方法那样调用.onCall方法,您必须从SDK中调用它。如果缺少 data 参数,它将抛出错误:

If the client trigger is invoked, but the request is in the wrong format, such as not being JSON, having invalid fields, or missing the data field, the request is rejected with 400 Bad Request, with an error code of INVALID_ARGUMENT.

所以你必须用一个参数来调用它,即使你不需要为任何东西使用参数。