【发布时间】:2020-05-02 10:26:35
【问题描述】:
我有一些从 React 应用程序调用的 firebase 云函数。本地主机到本地主机工作正常,但是当我尝试联系云功能的部署版本(来自我的本地主机和我部署的 React 应用程序)时,我收到一个 CORS 错误:
Access to XMLHttpRequest at 'https://us-xxxxxxxxxxxxx.cloudfunctions.net/api/login' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
这是index.js的函数:
const functions = require("firebase-functions");
const cors = require('cors');
const app = require("express")();
app.use(cors({ origin: true }));
const {
signup,
login,
loginAdmin,
getUserData,
} = require("./handlers/users");
...
app.post("/login", login);
....
exports.api = functions.https.onRequest(app);
这是我尝试添加到登录功能的内容:
exports.login = async (req, res) => {
res.set('Access-Control-Allow-Origin', "*"); // added this line
// actual function is irrelevant
但它不起作用,所以我也尝试了这个:
exports.login = async (req, res) => {
console.log('outside')
return await cors(req, res, async () => {
console.log('inside')
// function code....
但在这种情况下,函数挂起,从控制台我可以看到它打印 outside 而不是 inside。
前端代码是一样的,所以我怀疑问题出在哪里......
我该如何解决这个问题?
编辑:
感谢答案我在index.js中添加了这行代码:
const functions = require("firebase-functions");
const cors = require('cors');
const app = require("express")();
app.use(cors({ origin: true }));
app.options('/login', cors()) // <- this one
const {
signup,
login,
loginAdmin,
getUserData,
} = require("./handlers/users");
...
app.post("/login", login);
....
exports.api = functions.https.onRequest(app);
仍然没有运气,我再次部署但我遇到了同样的错误。
【问题讨论】:
-
CORS 是官方文档的一部分,包括飞行前的 CORS... -> github.com/expressjs/cors#enabling-cors-pre-flight
标签: javascript node.js firebase