javascript - 被 CORS 政策阻止的 Firebase 函数 api
问题描述
我有一些从 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);
仍然没有运气,我再次部署但我有同样的错误。
解决方案
推荐阅读
- c# - IdentityServer4 配置问题
- python - Seaborn color brewer 非交互式
- lotus-notes - 是否有任何关于 Lotus domino 应用程序开发的资源(PDF 或视频系列)
- ruby-on-rails - 几次 cmmits 后,我的 aws 密钥对在 github 上
- java - 升级到 Java 11 后如何诊断 Maven 错误
- struts2 - 升级到 struts 版本 2.5.17 时出现问题
- r - 数据框中单行中的重复值
- javascript - 在 Scroll 上移动 Divs,然后呆在那里(水平粘性条)
- html - 汉堡图标未显示在屏幕宽度小于 500 像素的屏幕上?
- javascript - 打字稿:错误 TS2322:类型“对象 []”不可分配给类型“[任何]”