Проблемы с CORS после подключения функций HTTP к Firebase Hosting - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть бэкэнд-архитектура с облачными функциями, которая работает с моим приложением React Native. Сейчас я пытаюсь создать панель инструментов приложения React, чтобы я мог визуализировать ресурсы и поведение своего приложения. Мой подход остается прежним, перенаправляйте все вызовы на конечную точку облачных функций https://[region]-[project].cloudfunctions.net/[function_name].

Проблема в том, что я получаю CORS, блокирующий мой запрос от браузера: это понятно, и решение - set up a middleware to handle CORS, которое было сделано и работает хорошо.

import * as functions from 'firebase-functions'
import * as cors from 'cors';
const corsHandler = cors({origin: true});

const signUp = functions.https.onRequest((request, response) => {
  corsHandler(request, response, () => {;})

  .../ signUp logic below
})

Все выглядит хорошо, за исключением того, что я не хочу останавливать проверку CORS, т.е. я хочу удалить corsHandler(request, response, () => {;}), но в то же время я также не хочу блокировать запросы CORS с хостинга Firebase,После поиска в Google я обнаружил, что могу подключить функции HTTP к хостингу Firebase и использовать rewrites в соответствии с правилом хостинга для доступа к конечным точкам запуска облачных функций.

rewrites under hosting rule in firebase.json
--------------------------------------------
"rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      },
      {
        "source": "/signUp",
        "function": "signUp"
      }
    ]

Но это также блокируется CORS. Я прочитал документацию здесь и здесь . Я использую Fetch API с конфигурацией, как показано ниже

 method: "GET", // POST
 mode: "cors", // no-cors, cors, *same-origin
 cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
 credentials: "same-origin", // include, *same-origin, omit
 headers: {
     Authorization: `Bearer ${access_token}`,
     "Content-Type": "text/json;application/json;charset=UTF-8"
 },
 redirect: "follow", // manual, *follow, error
 referrer: "no-referrer", // no-referrer, *client
 timeout: 20000

Пожалуйста, любая помощь будет оценена. Спасибо

1 Ответ

1 голос
/ 04 ноября 2019

Невозможно ограничить источник запросов, поступающих в облачные функции. Если ваша функция разрешает доступ к любому внешнему IP-адресу, она должна разрешать доступ ко всем IP-адресам. Единственный способ контролировать доступ - это требовать от клиента предоставления некоторых учетных данных, которые ваша функция может проверить при вызове.

...