Ошибка CORS облачной функции firebase с запросом ax ios - PullRequest
0 голосов
/ 09 июля 2020

У меня есть общая c облачная функция:

const functions = require('firebase-functions');
const cors = require('cors')({ origin: true });

exports.helloWorld = functions.https.onRequest((request, response) => {
    cors(request, response, () => {
        res.status(200).send("Hello from Firebase!");
    });
});

И я вызываю ее из клиента, используя ax ios:

  axios
    .get(
      "https://us-central1-dev-imcla.cloudfunctions.net/helloWorld",
    )
    .then((res) => {
      console.log(res);
    })
    .catch(er=>{
      console.log(er);
    })

И у меня 2 проблемы :

  1. Я получаю ошибку CORS.

Доступ к XMLHttpRequest в 'https://myurl/helloWorld' из источника 'http://localhost: 8080' заблокирован CORS policy: В запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin. xhr. js? b50d: 178 GET https://us-central1-dev-imcla.cloudfunctions.net/helloWorld net :: ERR_FAILED

Если я включаю плагин cors из браузера или вызываю эту функцию из почтальона, я получаю эту ошибку:

Ошибка: запрещено У вашего клиента нет разрешения на получение URL / helloWorld с этого сервера.

Ошибка: запрос завершился неудачно с кодом состояния 403 в createError (createError. js? 2d83: 16) при урегулировании (урегулирование. js? 467f: 17) в XMLHttpRequest.handleLoad (xhr. js? b50d: 61)

И дело в том, что я и аутентифицированный пользователь, и у меня есть пакет cors в облачном коде.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Возможно, не связано с CORS. Проверьте журналы функций firebase, чтобы узнать, есть ли у вас ошибки в коде.

{ ссылка }

1 голос
/ 09 июля 2020

Необходимо добавить следующее в обрабатывать запросы CORS в вашей облачной функции:

exports.corsEnabledFunction = (req, res) => {
  // Set CORS headers for preflight requests
  // Allows GETs from any origin with the Content-Type header
  // and caches preflight response for 3600s

  res.set('Access-Control-Allow-Origin', '*');

  if (req.method === 'OPTIONS') {
    // Send response to OPTIONS requests
    res.set('Access-Control-Allow-Methods', 'GET');
    res.set('Access-Control-Allow-Headers', 'Content-Type');
    res.set('Access-Control-Max-Age', '3600');
    res.status(204).send('');
  } else {
    res.send('Hello World!');
  }
};

Вы можете попробовать с этим примером. Это репозиторий guthub , где находится полный код.

...