Firebase HTTP function CORS



在使用Firebase HTTP函数时,我仍然遇到CORS问题。

这是我的 Web 控制台错误:

Response to preflight request doesn't pass access control check: No 
'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:3000' is therefore not allowed access. The 
response had HTTP status code 404.

这是我的函数:

const cors = require('cors')({ origin: true });
const express = require('express');
const functions = require('firebase-functions');
const app = express();
const validate_user = require('./validate_user_id_token.js');
const charge_card = async(req, res) => {
  // ...
}
app.use(cors);
app.use(validate_user);
app.use(charge_card);
exports.foo = functions.https.onRequest(app);

我想我已经阅读了每一个Firebse CORS问题。我还有一个近乎此处提供的示例的副本。

请帮忙:)

编辑:我正在调用的 URL 是正确的(texdiff.com 使用只是为了确保,函数日志将其显示为已执行但返回 404(。由于未知原因,无论如何都会返回 404。也许这就是CORS机制?

更新:我通过在 onRequest 处理程序中使用 cors() 来让事情在不使用 express 的情况下工作:

exports = module.exports = functions.https.onRequest(async(req, res) => {
    cors(req, res, () => {});
    await charge_card(req, res);
});

不理想,但它现在有效:/

根据 Firebase 文档,有几个对 CORS 配置的引用:

使用 CORS:

您可以通过在函数中调用 CORS 来启用 CORS 的使用,就像您在更新问题时所做的那样:

// Usage of the `cors` express middleware
return cors(req, res, () => {
  // TO-DO
});

此外,如果您已有 Express 应用程序,则可以通过以下方式启用 CORS:

const app = express();
app.use(cors({ origin: true }));

这是您在第一步中已经完成的操作,但是{ origin: true }定义存在差异,因此可能与此相关。

无论如何,根据文档,在请求中添加cors确实很好。

最新更新