Проблема с CORS для облачных функций Firebase и Angular - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь отправлять электронные письма своим клиентам с помощью облачных функций Firebase и Sendgrid. Когда я отправляю запрос своей функции в моем приложении Angular, я получаю следующую ошибку: Error message in my console

Я уже пытался с прокси-конфи в моем проекте Angular, и это не работает.

Это моя базовая функция:

import * as functions from "firebase-functions";
import * as sendgrid from "sendgrid";
import * as corsModule from "cors";

exports.httpEmail = functions.https.onRequest((req, res) => {
  cors(req, res, () =>
    Promise.resolve()
      .then(() => {
        if (req.method !== "POST") {
          throw new Error("Only POST requests are accepted");
        }

        const request = client.emptyRequest({
          method: "POST",
          path: "v3/mail/send",
          body: parseBody(req.body)
        });

        return client.API(request);
      })
      .then(response => {
        if (response.body) {
          res.send(response.body);
        } else {
          res.end();
        }
      })
      .catch(err => {
        console.error(err);
        throw new Error(err);
      })
  );
});

И вот как я ее называю:

import { HttpClient, HttpHeaders, HttpParams } from "@angular/common/http";

sendEmail(emailAddress, content) {
    const url = functionURL;
    const params: HttpParams = new HttpParams();
    const headers = new HttpHeaders({
     "Content-Type": "application/json",
     "Access-Control-Allow-Origin": "*"
   });

   params.set("to", emailAddress);
   params.set("from", "myEmail@gmail.com");
   params.set("content", content);

   return this.http
     .post(url, params, { headers: headers })
     .toPromise()
     .then(res => (this.emailSend = true))
     .catch(err => console.error(err));
  }

Буду признателен за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 30 марта 2020

Попробуйте добавить следующее в файл .htaccess

Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
1 голос
/ 31 марта 2020

https://github.com/Rob--W/cors-anywhere/

const proxy = "https://cors-anywhere.herokuapp.com/";
cosnt url = functionURL;
.get(proxy + url)
0 голосов
/ 31 марта 2020

Я также пытался использовать прокси, но он не работает. какой бы метод вы ни внедрили, он может работать для некоторого сервиса, но не гарантия будет работать на всех. Это обычно происходит, когда ваш сервис не включен Cors. в простых https вам нужно включить в вашем облаке, что бы вы ни использовали, но сделать это стоит вам. Вы можете вручную написать код, но. вам нужно написать для каждого сервиса, который будет головной болью для больших приложений

я использую chrome отключите один из них для тестирования приложения. вам также стоит попробовать

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