CORS Error Firebase Облачные функции в контактной форме - PullRequest
0 голосов
/ 02 мая 2020

У меня есть форма обратной связи с облачной функцией firebase, обрабатывающей отправку электронного письма с помощью nodemailer, и отправка запроса ios axe для сохранения данных в моей базе данных firestore. Я использую CORS в своей функции, но все еще получаю ошибку CORS в моей консоли при отправке формы.

Доступ к XMLHttpRequest в 'https://.cloudfunctions.net/submit' из источника 'http://localhost: 3000 ' был заблокирован политикой CORS: отсутствует заголовок «Access-Control-Allow-Origin» на запрашиваемом ресурсе. Я потратил около 2 часов на поиски в Интернете, и из того, что я прочитал, кажется, что если у меня есть const cors = require ('cors') ({origin: true}); он должен работать. Любая помощь будет отличной.

const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
const cors = require('cors')({origin: true});
const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;

const mailTransport = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: gmailEmail,
    pass: gmailPassword,
  },
});

exports.submit = functions.https.onRequest((req, res) => {
  cors(req, res, () => {
    if (req.method !== 'POST') {
      return;
    }
    const mailOptions = {
      from: req.body.email,
      replyTo: req.body.email,
      to: gmailEmail,
      subject: `${req.body.name} submitted a quote request!`,
      text: req.body.message,
      html: `<p>{req.body.message}</p>`,
    };
    mailTransport.sendMail(mailOptions).then(() => {
      console.log('New email sent to:', gmailEmail);
      res.status(200).send({ isEmailSend: true });
      return;
    });
  });
});


// This snippet is in my contact.js component
const sendEmail = () => {
    axios
      .post(
        'https://<myurl>.cloudfunctions.net/submit',
        formData
      )
      .then((res) => {
        db.collection('emails').add({
          name: formData.name,
          email: formData.email,
          phone: formData.phone,
          message: formData.message,
          time: new Date(),
        });
      })
      .catch((err) => {
        console.log(err);
      });
  };

Ответы [ 2 ]

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

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

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

У вас крошечная опечатка. Это случается.

exports.submit = functions.https.onRequest((req, res) => {
  cors(req, res, () => {

должно быть

exports.submit = functions.https.onRequest((req, res) => {
  cors()(req, res, () => {
      ^^
...