Вызов моей собственной функции Firbase, заблокированной CORS, только в браузере - PullRequest
1 голос
/ 07 мая 2020

Я получаю сообщение об ошибке:

Access to XMLHttpRequest at 'https://us-central1-myproject-64732.cloudfunctions.net/getProduct has been blocked by CORS

Мой домен зарегистрирован как example.com.

EDIT

У меня:

      const cors = require('cors')({origin: true});
      const rp = require('request-promise');

      exports.getProduct = functions.https.onRequest((request, response) => {    
        const options = {
        uri: url,
        headers: {

        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': '*',
        'Accept-Language': 'en-US,en',
        "Access-Control-Allow-Origin":"*",
        'Access-Control-Allow-Methods': 'GET, PUT, POST, OPTIONS',
        'Access-Control-Allow-Headers': '*',
        'Cache-Control': 'max-age=0',
        'Connection': 'keep-alive',
        'Referer': 'http://www.google.com/',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
      }
          rp(options)
          .then(($) => { ...

Мой Access-Control-Allow-Origin присутствует, а в сообщении об ошибке указано, что не отображается.

EDIT2

Функция работает при использовании на локальном компьютере, а также в симуляторе терминала, но не работает в браузере.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

попробуйте вот так:

import * as functions_ from 'firebase-functions';
// import * as firebaseHelper from 'firebase-functions-helper';
import * as express_ from 'express';
import * as bodyParser_ from "body-parser";
import News from './news.function';
import Meteo from './meteo.function';

const _cors = require('cors')({
    origin: true,
});

let bodyParser = bodyParser_;
let express = express_;
let functions = functions_;
// const db = admin.firestore();
const app = express();
const main = express();




// YOUR API ROUTES  
app.get('/news/', (req, res) => News(req, res));
app.get('/meteo/', async (req, res) => {
    console.log('here');
    Meteo(req, res)
});

main.use('/api/v1', app);
main.use(bodyParser.json());
main.use(bodyParser.urlencoded({ extended: false }));




// webApi is your functions name, and you will pass main as 
// a parameter
export const webApi = functions.https.onRequest((req, resp) => {
    _cors(req, resp, () => {
        main(req, resp);
    })
});

Надеюсь, это вам поможет !!

0 голосов
/ 07 мая 2020

Для тех, кто борется, я нашел решение.

exports.getProduct = functions.https.onRequest((request, response) => {

     cors(request, response, () => { // ******  thats solve it

       const options = {
        uri: url,
        headers: { ......

         rp(options)
          .then(($) => { ...

добавление запроса cors заставляет его работать. Включите конечно же библиотеку. Я также обнаружил, что когда я развертываю одну функцию - она ​​не всегда будет ее развертывать или создавать какие-то странные проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...