【问题标题】:Issues with CORS after connecting HTTP Functions to Firebase Hosting将 HTTP 函数连接到 Firebase 托管后出现 CORS 问题
【发布时间】:2020-02-29 16:17:22
【问题描述】:

我有一个支持云功能的后端架构,可与我的 React Native 应用程序配合使用。现在,我正在尝试构建一个 React 应用程序仪表板,以便我可以可视化我的应用程序的资源和用户行为。我的方法保持不变,将所有调用路由到云函数端点https://[region]-[project].cloudfunctions.net/[function_name]

挑战是我得到一个 CORS 阻止了我的来自浏览器的请求:这是可以理解的,解决方案是 set up a middleware to handle CORS,它已经完成并且运行良好。

import * as functions from 'firebase-functions'
import * as cors from 'cors';
const corsHandler = cors({origin: true});

const signUp = functions.https.onRequest((request, response) => {
  corsHandler(request, response, () => {;})

  .../ signUp logic below
})

一切看起来都很好,除了我不想停止 CORS 检查,即我想删除 corsHandler(request, response, () => {;}) 但同时我也不希望 CORS 阻止来自 Firebase 托管的请求。谷歌搜索后,我发现我可以将 HTTP 函数连接到 Firebase 托管,并在托管规则下使用 rewrites 访问云函数触发端点。

rewrites under hosting rule in firebase.json
--------------------------------------------
"rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      },
      {
        "source": "/signUp",
        "function": "signUp"
      }
    ]

但这也被 CORS 阻止了。我已阅读文档 herehere。我正在使用 Fetch API 的配置如下所示

 method: "GET", // POST
 mode: "cors", // no-cors, cors, *same-origin
 cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
 credentials: "same-origin", // include, *same-origin, omit
 headers: {
     Authorization: `Bearer ${access_token}`,
     "Content-Type": "text/json;application/json;charset=UTF-8"
 },
 redirect: "follow", // manual, *follow, error
 referrer: "no-referrer", // no-referrer, *client
 timeout: 20000

如有任何帮助,我们将不胜感激。谢谢

【问题讨论】:

  • 确保函数没有以错误结束;我认为,当这种情况发生时,浏览器会显示 CORS 问题。
  • 你能解释一下吗,@fractalix

标签: reactjs cors google-cloud-functions firebase-hosting


【解决方案1】:

无法限制进入 Cloud Functions 的请求的来源。如果您的函数允许访问任何外部 IP 地址,则它必须允许访问所有 IP 地址。您必须控制访问的唯一方法是要求客户端提供一些凭据,您的函数可以在调用它时检查这些凭据。

【讨论】:

  • 感谢@dougstevenson 的回复。但我更关心的是,在我将 HTTP 函数连接到 Firebase 托管之后,当请求来自 Firebase 托管时,为什么会出现 CORS 问题。
  • 好吧,当您说“我的目标是确保无法从我的组织以外的域访问其他无法具有所需授权标头的端点”时,我感到很困惑。没有域的限制。如果您想知道为什么在您认为不应该需要 cors 时需要它,请编辑问题以更清楚地说明显示客户端和服务器代码均未按您预期方式工作的问题。
  • 嗨@dougstevenson,我已经编辑了这个问题,希望现在更清楚了。
  • 我建议也包括客户端 JavaScript。
  • 好的,我会尽快这样做,但是您能帮忙从客户端 JS 代码中建议在这种情况下需要什么吗?这样我就可以提供正确的元素来实现这方面的帮助。同时,我已将 fetch api 配置对象添加到问题中
猜你喜欢
  • 2020-08-13
  • 2020-06-01
  • 2019-03-12
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 2019-02-15
  • 2022-11-12
  • 2021-12-01
相关资源
最近更新 更多