【问题标题】:500 error response to CORS preflight OPTIONS when calling cloud function. How can I call a cloud function from my web-app and be CORS compliant?调用云功能时对 CORS 预检选项的 500 错误响应。如何从我的网络应用程序调用云功能并符合 CORS?
【发布时间】:2019-11-25 15:41:39
【问题描述】:

我正在尝试将云功能整合到我的网络应用中。 不幸的是,我遇到了我正在努力处理的 CORS 错误。 似乎几乎所有关于 CORS 的文档都在使用 XMLHTTPRequests,有些正在使用 fetch api,但我找不到任何关于如何使用 firebase.functions.httpsCallabe()

的信息

客户端代码:

export function bla() {
const callable = firebase.functions().httpsCallable('helloWorld');
    return callable().then(console.log);
}

整个云函数(在打字稿中):

import * as functions from 'firebase-functions';

const cors = require('cors')({ origin: true });

export const helloWorld = functions.https.onRequest((request, response) => {
    cors(request, response, () => {
        response.status(200).send("Hello from Firebase!");
    });
});

这是触发我的 bla() 函数时 chrome 控制台输出的内容:

在 Firebase 控制台中,我收到一条消息,提示我正在使用标准计划,因此无法访问外部资源。不确定这是标准消息还是我的代码的实际问题。

【问题讨论】:

  • 请注意,i.imgur.com/pHr9NQO.png 表示您的浏览器正在发出 CORS 预检 OPTIONS 请求,并且服务器正在响应该 OPTIONS 请求并出现 500 错误。 500 错误是您需要修复的根本问题。
  • 您似乎没有正确配置服务器以接受 CORS。 enable-cors.org服务器需要响应带有访问控制头的选项调用

标签: javascript firebase google-cloud-functions preflight


【解决方案1】:

您不能使用 Functions 客户端 SDK 调用 HTTP type functions。您只能使用 Functions 客户端 SDK 调用链接文档中声明的 callable type functions

可调用函数使用functions.https.onCall 声明,而HTTP 函数使用functions.https.onRequest 声明。

如果你想调用一个普通的 HTTP 类型的函数,你应该使用一些 HTTP 客户端。

【讨论】:

  • 该服务器上好像没有启用 CORS?
  • @JuanMendes 没关系。它只是行不通。客户端甚至不会调用该函数的 URL。 Functions SDK 将接管 HTTP 事务的每个细节。
  • 啊,很好,成功了!最好的事情是我什至不必以这种方式手动处理 Auth。我猜它在参考文献中被标记为“应用程序”这一事实误导我相信它不适用于 Web。
  • 如果您在文档中发现一些令人困惑的地方,请使用每页顶部的“发送反馈”链接。
猜你喜欢
  • 2018-05-15
  • 1970-01-01
  • 2021-06-07
  • 2018-08-27
  • 2017-06-29
  • 2021-06-20
  • 2021-04-08
  • 2019-01-03
  • 2021-03-05
相关资源
最近更新 更多