Запрос от хостинга Firebase к функции Firebase, заблокированной CORS - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь отправить push-уведомления между двумя устройствами для крошечного прототипа.Оба они являются приложениями Vue.js со встроенным Firebase SDK, поэтому для реализации потока push-уведомлений я развернул функцию firebase, но когда я вызываю ее с любого из устройств, в качестве ответа принимается ошибка CORS.

Оба устройства (мобильное и настольное) имеют одинаковый клиентский код и знают токены друг друга (хранилище в базе данных реального времени Firebase).Эта функция использует только отправку push-уведомлений через Firebase.

Функция Firebase:

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

admin.initializeApp();

exports.notification = functions.https.onRequest((req, res) => {
    return cors(req, res, () => {
        if (req.method === "POST") {
            return admin.messaging().send(notification)
                .then(result => {
                    console.log(result);
                    res.status(200).send("ok")
                })
                .catch(err => res.status(500).send(err));
        } else {
            return res.status(400).send("Method not allowed");
        }
    });
});

Код клиента:

send(notification, token) {
    return fetch("https://[zone]-[project].cloudfunctions.net/notifications", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ token, notification })
    });
}

И ошибка:

Access to fetch at 'https://[zone]-[project].cloudfunctions.net/notifications' from origin 'https://[project].web.app' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Не могли бы вы использовать триггер functions.https.onCall?

См. https://firebase.google.com/docs/functions/callable.

Облачные функции для клиентских SDK Firebase позволяют вызывать функции непосредственно из Firebaseприложение.Чтобы вызвать функцию из вашего приложения таким образом, напишите и разверните функцию HTTPS Callable в Cloud Functions, а затем добавьте клиентскую логику для вызова функции из вашего приложения.

0 голосов
/ 30 мая 2019

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

...