CORS в облачных функциях с машинописью и осями - PullRequest
0 голосов
/ 07 марта 2020

В моем приложении реагирования я отправляю почтовый запрос с 2 атрибутами на имя облачной функции и телефон, но возвращает ограничение от CORS в приложении реагирования, я использую облачные функции с Typescript. Это мой код из моего приложения реагирования.

        axios
          .post(
            "https://us-central1-react-firebase-athentica-64987.cloudfunctions.net/firestoreTtlCallback",
            {
              name: `${this.state.contactName}`,
              phone: `${this.state.phone}`,
            }
          )
          .then(function(response) {
            // eslint-disable-next-line no-console
            console.log(response);
          })
          .catch(function(error) {
            // eslint-disable-next-line no-console
            console.log(error);
          });
      }); ```

И это из моей облачной функции:

exports.firestoreTtlCallback = functions.https.onRequest(async(req , res) => {
    res.set('Access-Control-Allow-Origin', "*")
    res.set('Access-Control-Allow-Methods', 'GET, POST')
    res.set('Access-Control-Allow-Headers', 'Content-Type');

    const name = req.body.name;
    console.log(name)
    //recibir nombre de contacto y numero de telefono
    const payload = req.body as ExpirationTaskPayload
    try {

        // buscar usuario y obtener token
        const user = await db.collection('users').doc(payload.uid).get()
        const data:any = user.data()
        const counter = await admin.firestore().collection("users").doc(payload.uid).collection("kards").doc("0").collection("kardsRef").get();
        const doc = await admin.firestore().doc(`/users/${payload.uid}/kards/0/kardsRef/${counter.size}`)
        doc.set({ msg: "hola" })
        var message = {
            data: {
              score: '850',
              time: '2:45'
            },
            token: data.token
          };
        //enviar notificacion
        await admin.messaging().send(message)

        // Response is a message ID string.
        // borrar notificacion firestore
        await admin.firestore().doc(payload.docPath).delete()
        return res.status(200).send(`Task has been executed`);
    }
    catch (error) {
        console.error(error)
        return res.status(500).send(error)

    }

    });

Это ошибка, которую я получаю:

Доступ к выборке в ' https://us-central1-react-firebase-athentica-64987.cloudfunctions.net/firestoreTtlCallback 'from origin' http://localhost: 3000 'было заблокировано политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: он не имеет статуса HTTP ok.

1 Ответ

0 голосов
/ 07 марта 2020

Вы найдете здесь в do c подробности о том, как включить поддержку CORS. Таким образом, следующее должно быть сделано (не проверено):

//...

import * as cors from 'cors';

const corsOptions = { origin: true };
const corsMiddleware = cors(corsOptions);

//...

exports.firestoreTtlCallback = functions.https.onRequest(async (req, res) => {

    corsMiddleware(req, res, () => {

        const name = req.body.name;
        console.log(name);
        //recibir nombre de contacto y numero de telefono
        const payload = req.body as ExpirationTaskPayload;
        try {
            // buscar usuario y obtener token
            const user = await db
                .collection('users')
                .doc(payload.uid)
                .get();
            const data: any = user.data();
            const counter = await admin
                .firestore()
                .collection('users')
                .doc(payload.uid)
                .collection('kards')
                .doc('0')
                .collection('kardsRef')
                .get();
            const doc = await admin
                .firestore()
                .doc(`/users/${payload.uid}/kards/0/kardsRef/${counter.size}`);
            doc.set({ msg: 'hola' });
            var message = {
                data: {
                    score: '850',
                    time: '2:45'
                },
                token: data.token
            };
            //enviar notificacion
            await admin.messaging().send(message);

            // Response is a message ID string.
            // borrar notificacion firestore
            await admin
                .firestore()
                .doc(payload.docPath)
                .delete();
            return res.status(200).send(`Task has been executed`);
        } catch (error) {
            console.error(error);
            return res.status(500).send(error);
        }

    });

});
...