【问题标题】:blocked by CORS policy: No 'Access-Control-Allow-Origin' header in react / node被 CORS 策略阻止:反应/节点中没有“Access-Control-Allow-Origin”标头
【发布时间】:2020-04-09 04:08:05
【问题描述】:

由于某种原因,我收到了错误

被 CORS 政策阻止:没有“Access-Control-Allow-Origin”标头

来自我的代码:



import * as firebase from "firebase";

function FreshMail() {
  const db = firebase.firestore();
  firebase.auth().onAuthStateChanged(function (user) {
    if (user) {
      let user = firebase.auth().currentUser.uid;

      let cityRef = db.collection("Users").doc(user);
      let getDoc = cityRef
        .get()
        .then((doc) => {
          if (!doc.exists) {
            console.log("No such document!");
          } else {
            console.log("Document data:", doc.data());

            var request = require("request");

            let data = doc.data();

            var dataString = {
              userE: data.UserEmailAddress,
              userP: data.UserEmailPassword,
              userH: data.UserEmailHost,
              userPort: data.UserEmailPort,
            };

            var headers = {
              "Content-Type": "application/json",
              "Access-Control-Allow-Origin": "*",
              "Access-Control-Allow-Methods": "GET, PUT, POST, OPTIONS",
              "Access-Control-Allow-Headers": "*",
            };

            var options = {
              url:
                "https://us-central1-zenmail-bfd57.cloudfunctions.net/***",
              method: "POST",
              body: dataString,
              headers: headers,
            };

            function callback(error, response, body) {
              if (!error && response.statusCode == 200) {
                console.log(body);
              }
            }

            request(options, callback);
          }
        })
        .catch((err) => {
          console.log("Error getting document", err);
        });
    }
  });
}

export default FreshMail;


我尝试将访问控制允许来源添加到标题中,但即使这样似乎也不起作用。我尝试从 localhost 和我的 firebase 托管运行它,但两者都出现错误。任何帮助将不胜感激!

【问题讨论】:

  • 出于某种原因 - 是的,您尝试访问的跨源资源不希望您访问它......并将 reqponse 标头添加到您的请求中获胜't fix that ... cors 由服务器控制,而不是客户端 - 但是,此代码在 nodejs 中运行?所以这很奇怪
  • 那你有什么建议呢?
  • 首先,这段代码是在浏览器中还是在nodejs中?如果是浏览器,那么你不能轻易绕过 CORS - 只需使用 your 服务器向远程服务器发出请求
  • 它在浏览器中运行,将数据发送到我的 Firebase 函数之一。此功能在我的反应应用程序中单击按钮时运行。我可以在函数中运行其中的大部分内容,但我仍然需要发送 UID,这仍然会导致这个问题,这意味着我认为我必须为此找到解决方案。
  • https://us-central1-zenmail-bfd57.cloudfunctions.net/*** 是跨域的 - 所以服务器需要允许这样的访问

标签: javascript node.js firebase


【解决方案1】:

我遇到了同样的问题,这篇文章可能会帮助你解决这个问题

https://medium.com/@dtkatz/3-ways-to-fix-the-cors-error-and-how-access-control-allow-origin-works-d97d55946d9

我用https://cors-anywhere.herokuapp.com/https://nameofapisite.com 对我来说效果很好

【讨论】:

  • cors-anywhere.herokuapp.com 是懒惰的编码人员的权宜之计,有一天它可能不再可用,或者有问题的第三方站点可能会阻止来自该服务器的请求 - 然后你需要让使用您自己的服务器的请求(本质上就是 cors-anywhere 所做的,然后添加 cors 响应标头) - 最好现在正确执行并避免潜在的未来问题
猜你喜欢
  • 2021-02-01
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 2019-08-10
  • 2019-08-09
  • 2019-04-26
  • 1970-01-01
  • 2020-04-07
相关资源
最近更新 更多