【问题标题】:How to fix Firebase CORS errors in callable functions? [duplicate]如何修复可调用函数中的 Firebase CORS 错误? [复制]
【发布时间】:2021-03-18 07:35:55
【问题描述】:

我遇到了 Firebase 和 COR 的问题,显然它无法到达端点并出现以下错误:

访问获取地址 'https://europe-west2-XXX.cloudfunctions.net/fetchChatToken' 来自原产地“https://trato.app”已被 CORS 政策阻止: 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。如果不透明的响应满足您的需求,请设置请求的 模式为“no-cors”以获取禁用 CORS 的资源。 service.ts:203

发布 https://europe-west2-XXX.cloudfunctions.net/fetchChatToken net::ERR_FAILED(匿名)@service.ts:203 ... ...

error.ts:66 Uncaught (in promise) 错误:内部 在新的 t (error.ts:66) 在错误.ts:175 吃。 (service.ts:276) 在 tslib.es6.js:100 在 Object.next (tslib.es6.js:81) 在 (tslib.es6.js:71)

我还检查了开发检查器 (chrome) 上的网络选项卡以检查 CORS 标头是否存在,我没有看到它。

另外,我一直在检查 firebase 函数日志,显然甚至没有被调用,最后一行显示的是部署。

我使用它的方式是这样的:

前端:

const functions = firebaseApp.functions('europe-west2');
export const fetchChatToken = async () => (await functions.httpsCallable('fetchChatToken')()).data;

函数(后端)端:

const ensureAuthentication = auth => {   if (!auth) throw new HttpsError("unauthenticated", "authentication required"); };

exports.fetchChatToken = functions.region("europe-west2").https.onCall((data, context) => {
    ensureAuthentication(context.auth);
    try {
      const { AccessToken } = twilio.jwt;
      const { ChatGrant } = AccessToken;

      const grant = new ChatGrant({ 
        serviceSid: conversationsid
      });
      const token = new AccessToken(accountsid, apikey, apisecret);
      token.addGrant(grant);
      token.identity = context.auth.uid;
      return token.toJwt();
    } catch (error) {
      console.error(error);
      throw new HttpsError("internal", "internal error");
    }   });

【问题讨论】:

  • 可调用函数在内部自动使用 cors,而您实际上无法控制它。请编辑问题以显示未按预期方式工作的代码。
  • @DougStevenson 我发现错误不在 firebase 预览频道中,它也在默认托管中。它无处不在,但不在模拟器中。已编辑。
  • 函数端的错误日志是怎么说的?
  • 在模拟器上运行它,没有错误,工作完美,部署在firebase中没有打印任何日志或调用,它只是没有被调用,我可以看到最后一个日志在部署时间(我重新部署也可以尝试)还有con错误选项卡,它没有显示任何错误,但正如所说,这些函数没有被aparently调用。
  • 这能回答你的问题吗? Enabling CORS in Cloud Functions for Firebase

标签: firebase google-cloud-functions cors firebase-hosting


【解决方案1】:

确保客户端引用的函数名正确,见https://stackoverflow.com/a/62042554/1030246

【讨论】:

    【解决方案2】:

    很遗憾,此 CORS 错误可能有多种原因。如果云函数返回“内部”错误消息,可能是由于区域不一致或云函数代码中的错误。我在创建新的云功能时出现此错误的清单:

    • Firestore-Project、函数和客户端初始化的不匹配区域导致 CORS 错误
    • 云函数内部的代码错误导致此错误
    • 新函数必须包含在云函数索引文件中(如果使用)
    • 云函数名称必须与客户端调用的字符串匹配
    • 在部署新功能之前删除 Firebase 仪表板中的云功能,然后出现错误

    【讨论】:

      【解决方案3】:

      我解决了将其更改为我们的问题,基本上删除了该区域,从函数声明和函数调用中取出“europe-wes2”区域,它再次正常工作。

      我认为 firebase 方面存在一些错误。

      【讨论】:

        猜你喜欢
        • 2020-07-07
        • 2020-05-13
        • 2021-11-30
        • 2019-09-24
        • 2018-10-21
        • 2020-02-28
        • 2023-03-18
        • 2019-11-22
        • 2021-07-02
        相关资源
        最近更新 更多