cors에 의해 차단 된 Firebase https onCall 함수

Nov 10 2020

나는이 sendMail내 사이트에 문의 양식에서 이메일을 보내는 데 사용할 클라우드 기능을. 이 사이트는 맞춤형 Google 도메인을 사용하여 Firebase에서 호스팅됩니다. 문제는 호스팅 된 사이트에서 함수를 호출하려고 할 때마다이 오류가 발생한다는 것입니다.

지금까지 시도한 내용은 다음과 같습니다.

  1. 브라우저에서 로컬로 기능을 테스트 해 보았는데 제대로 작동합니다. cors 오류가 없습니다.
  2. firebase 셸에서 함수를 호출하여 테스트하는 것도 cors 오류없이 잘 작동합니다.

  1. 내 Google Cloud 콘솔을 확인하고 모든 사용자가 함수를 호출 할 수 있는지 확인했습니다.

4. 또한 cors 라이브러리를 사용하여 함수를 래핑 해 보았지만 작동하지 않았습니다.

sendMail함수를 호출하는 방법은 다음과 같습니다 .

handleSubmit = (e) => {
    e.preventDefault();
    const sendMail = firebase.app().functions('us-central1').httpsCallable("sendMail");
    
    sendMail({ details: this.state })
      .then((res) => {
        this.setState({
          loading: true,
        });
        this.notify("success");
      })
      .catch((error) => {
        this.notify(error);
      });
  };

전체 sendMail기능 은 다음과 같습니다 .

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

admin.initializeApp();

// Use gmail to set up transporter
let transporter = nodemailer.createTransport({
  service: "gmail",
  auth: {
    user: functions.config().mail.user,
    pass: functions.config().mail.pass
  },
});

exports.sendMail = functions
  .region("us-central1")
  .https.onCall((data, context) => {
    const info = data.details;
    const mailOptions = {
      from: `${info.name} <${info.email}>`,
      to: functions.config().mail.dest,
      subject: info.subject,
      html: `<p style="font-size: 16px;">${info.name}, ${info.email}</p>
                    <p
                    style="
                        font-size: 1rem;
                        background: #FFECB3;
                        padding: 10px;
                        border-radius: 10px;">${info.message}</p>
                `, // email content in HTML
    };

    // returning results
    return transporter.sendMail(mailOptions, (err, info) => {
      if (err) {
        console.log("failed", err);
      }
    });
  });

비슷한 질문을 받았지만 실제로 거의 모든 것을 시도했습니다. 내 firebase 호스팅 사이트에서 호출 할 때만 cors 문제가 발생합니다. 누군가 도와주세요!

답변

2 Cleanbeans Nov 11 2020 at 06:36

onCall은 cors와 관련하여 onRequest와 다르게 동작합니다. 예를 들어 동일한 지역에서 호출하는지 확인해야합니다. 이 게시물 보기

cors 문제는 함수에 오류가있는 경우 에뮬레이터 및 메일 보내기 응답을 확인할 가치가있는 경우 발생할 수 있습니다.