为Firebase使用云函数时出现CORS错误



这是我提出的第一个问题,如果格式不正确,我深表歉意。

我一直在试图找出如何处理以下CORS错误,以及CORS飞行前错误:

。。。已被CORS策略阻止:"Access Control Allow Origin"标头具有值https://example.com/',该值不等于提供的原点

在过去的几天里,我阅读了关于这个主题的每一个问题,以及我在CORS/Cloud Functions/Axios/等网站上能找到的所有其他文档。我正在使用React、Node、Express、Axios、Google Firebase来托管和Google Cloud功能。

我正在尝试访问PayPal API以获得一个承载令牌,以便进一步请求API。我知道一些与请求头相关的代码可能是多余的。我只是想把任何东西扔到这上面。

有人有什么想法吗?

节点文件-index.js

const axios = require("axios");
const express = require("express");
const cors = require("cors")({ origin: true });
const app = express();
app.use(cors());
app.use(express.json());
app.post("/v1/oauth2/token/", cors(), (req, res) => {
res.set("Access-Control-Allow-Origin", "https://example.com/");
var data = qs.stringify({
grant_type: "client_credentials",
});
var config = {
method: "post",
url: "https://api-m.sandbox.paypal.com/v1/oauth2/token/",
headers: {
"Access-Control-Allow-Origin": "https://example.com/",
Authorization:"xyz",
"Content-Type": "application/x-www-form-urlencoded",
},
data: data,
};
axios(config)
.then(function (response) {
let bearerToken = response.data.access_token;
res.status(201).send(bearerToken);
})
.catch(function (error) {
console.log(error);
});
});
exports.api = functions.https.onRequest(app);

react文件-payment.js

import axios from "../axios/axios";
const oneTimePaypalPayment = async () => {
const response = await axios.post("/v2/checkout/orders");
console.log(response);
};

axios文件-axios.js

import axios from "axios";
const instance = axios.create({
headers: {
"Access-Control-Allow-Origin": "https://example.com/",
"Access-Control-Allow-Headers": "https://example.com/",
},
baseURL: "https://us-central1-example.cloudfunctions.net/api/"
});
export default instance;

我尝试过的

我试过使用通配符"*"只是想让它发挥作用,但没有运气。我在另一个答案上读到,谷歌云功能无论如何都不识别"*"。我还尝试了下面的所有代码,以及许多其他方法来操作请求标头上的访问控制允许来源

const allowCrossDomain = function (req, res, next) {
res.header("Access-Control-Allow-Headers", "*");
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");

next();
};
app.use(allowCrossDomain);
app.all("*", (req, res, next) => {
res.header("Access-Control-Allow-Headers", "*");
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
next();
});
const corsOptions = {
origin: "https://example.com/",
};
app.use(cors(corsOptions))
app.options("/v1/oauth2/token", cors(corsOptions));
app.use(cors({origin:true}));

任何想法都将不胜感激

在您正在导出或使用的云函数中,以下用于Origin:

exports.your function = async (req, res) => {
res.set('Access-Control-Allow-Origin', '*');

最新更新