【问题标题】:Firebase Cloud Functions: "status":"INVALID_ARGUMENT"Firebase 云函数:“状态”:“INVALID_ARGUMENT”
【发布时间】:2020-09-17 08:16:39
【问题描述】:

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

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。

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

【问题讨论】:

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


    【解决方案1】:

    您将使用onCallcallable function 与使用onRequestHTTP function 进行比较。可调用函数的实现方式与 HTTP 函数非常不同。我建议阅读我链接的文档,以便更好地理解差异。要点是可调用函数遵循specific protocol,并且任何客户端访问都必须遵循该协议,否则可能会收到您在此处显示的错误。该协议的最佳实现是 Firebase 提供的客户端 SDK - 您应该使用它来调用该函数。

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

    【讨论】:

      【解决方案2】:

      答案是你不能像调用onRequest方法一样调用.onCall方法,你必须从SDK中调用它。如果data 参数丢失,则会抛出错误:

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

      因此,即使您不需要将参数用于任何事情,也必须使用参数调用它。

      【讨论】:

        猜你喜欢
        • 2019-06-27
        • 2020-12-01
        • 2021-03-31
        • 2019-01-18
        • 2021-06-06
        • 1970-01-01
        • 2020-06-28
        • 2017-07-31
        • 2019-10-17
        相关资源
        最近更新 更多