Firebase 可调用云函数 CORS 错误

Posted

技术标签:

【中文标题】Firebase 可调用云函数 CORS 错误【英文标题】:Firebase Callable Cloud Function CORS Error 【发布时间】:2020-07-07 12:41:54 【问题描述】:

以下是调用云函数的客户端代码

var getShippingRate = firebase
            .functions()
            .httpsCallable("shippo-generateShippingRate");
          getShippingRate( address: shippo )
            .then(function(result) 
              // Read result of the Cloud Function.
              console.log("THE SHIPPING RATES", result.data.shipment);
            )
            .catch(function(error) 
              // Getting the Error details.
              console.log("ERROR SHIPPING: ", error);
              var code = error.code;
              var message = error.message;
              var details = error.details;
            );

云端功能:

exports.generateShippingRate = functions.https.onCall(async (data, context) => 
const customer_address = data.address;

return generateShipmentObject(customer_address);
);

generateshipmentObject 返回:

shippo.shipment.create(

  address_from: addressFrom,
  address_to: addressTo,
  parcels: [parcel],
  async: true
,
(err, shipment) => 
  // asynchronously called
  if (err) 
    return  error: err ;
   else 
    return  result: shipment ;
  

我得到标准的 CORS 错误,但可调用的云函数应该自动处理这个问题:

CORS 政策已阻止从源“http://localhost:5000”获取...的访问权限:

编辑

我正在使用firebase serve --only hosting 在本地主机上进行测试。

Cloud Functions 使用 firebase deploy --only funtions 部署

我正在同一个站点上调用其他类似的没有该问题的 Cloud Functions。

【问题讨论】:

您使用的是 Firebase 本地模拟器吗?如果是这样,您能否编辑问题以详细说明该设置以及我们如何能够重现您的情况? 响应的 HTTP 状态码是什么?您可以使用浏览器开发工具中的网络窗格进行检查。您是否确认这是 200 OK 成功响应而不是 4xx 或 5xx 错误? @sideshowbarker 由于 CORS 问题,自 Preflight response is not successful 以来没有任何响应 @DougStevenson 我正在使用firebase serve --only hosting 在本地主机上进行测试 【参考方案1】:

临时修复:

在云控制台功能页面中,选择一个功能以显示信息面板。在权限选项卡中,选择添加成员。在新成员字段中,键入 allUsers。在角色下拉列表中,选择云函数,然后选择云函数调用者,然后保存。

一个函数在第一次创建时具有受限权限实际上是有道理的,但是我已经习惯了默认权限的存在,所以它是一个错误(或新功能),绝对让我失望。当然这并不能解决根本问题,但希望它有所帮助。

【讨论】:

谢谢!我还在这里发现了一个警告firebase.google.com/docs/functions/manage-functions“警告:使用低于 7.7.0 版本的任何 Firebase CLI 部署的新 HTTP 和 HTTP 可调用函数默认是私有的,并在调用时抛出 HTTP 403 错误。要么明确地将这些函数公开,或在部署任何新功能之前更新您的 Firebase CLI。” 为了补充这个答案,这可以在cloud.google.com/functions/docs/securing/…上找到

以上是关于Firebase 可调用云函数 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章

可调用云函数错误:响应缺少数据字段

firebase - 从可调用云函数访问数据库时应用检查失败

Firebase 可调用函数失败 CORS 重定向

使用 Firebase CLI shell 测试可调用的云函数

Firebase 可调用函数 + CORS

Firebase可调用函数+ CORS