У меня есть некоторые облачные функции Firebase, которые я вызываю из приложения React. Localhost to localhost работает нормально, но когда я пытаюсь связаться с развернутой версией облачных функций (как с моего localhost, так и из моего развернутого приложения 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);
Все еще не повезло, я развернул снова, но у меня та же ошибка.