【问题标题】:Use custom domain for firebase function http calls使用自定义域进行 firebase 函数 http 调用
【发布时间】:2023-03-17 16:07:02
【问题描述】:

有没有办法将自定义域用于 firebase 云功能 http 挂钩。

云函数的默认网址如下所示:

https://us-central1-my-awesome-app.cloudfunctions.net/ios-oauth/

还有

我想让它看起来像这样:

https://myawesomeapp.com/ios-oauth/

如果有其他人在寻找相同的解决方案,我环顾四周,果然我找到了这个:

https://stackoverflow.com/questions/43482224/firebase-cloud-functions-custom-domain

【问题讨论】:

  • 2020 年 10 月 1 日,Firebase 7.22.0 发布了“用于 Firebase 客户端 SDK 的云函数:用户现在可以为可调用函数设置自定义域。”
  • 如果你使用 Express.js 和多个路由,请查看stackoverflow.com/questions/44959652/…

标签: firebase dns google-cloud-functions


【解决方案1】:

我已联系 Firebase 支持以获取有关此问题的一些答案。 我被转发到文档中的这一部分。

https://firebase.google.com/docs/hosting/functions#create_an_http_function_to_your_hosting_site

您可以将自己的域与 firebase-cloud-functions 一起使用。方法是使用firebase-hosting。

  1. 将自定义域连接到 Firebase 托管
  2. 将自定义函数路由添加到 firebase.json

    {
      "hosting": {
        "public": "public",
    
        // Add the following rewrites section *within* "hosting"
        "rewrites": [{
          "source": "/bigben", "function": "bigben"
        }]
    
      }
    }
    
  3. 部署到 Firebase

【讨论】:

  • 是否可以创建动态路由,这样您就不必定义每个函数?像/api/*** 这样的东西*** 是函数名?希望我没有在这里违反规则,只是没有理由为此创建一个完整的问题。
  • 解决方案如何?这仅在 us-central1 中受支持。
  • 而且它只适用于 GET 请求。如果您尝试 POST,则正文会丢失...
【解决方案2】:

接受的答案是正确的,我去年创建了这个存储库来演示功能:https://github.com/cjmyles/firebase-react-express

为了根据 https://firebase.google.com/docs/hosting/full-config#rewrites 保留 HTML pushState 功能,您可能希望扩展规则以允许所有其他请求通过您的 index.html 页面,这解决了 @Boris 在他的回答中面临的问题。

"rewrites": [
    {
        "source": "/api/**",
        "function": "app"
    },
    {
        "source": "!/@(api)/**",
        "destination": "/index.html"
    }
]

这实际上并不需要,因为重写规则旨在匹配请求的第一次出现(因此顺序很重要),但这对我来说是通过允许所有非 api 相关请求通过。

请注意:在撰写本文时,Firebase documentation 声明:Firebase 托管仅在 us-central1 中支持云功能。

【讨论】:

  • 不错的一个!感谢分享!
  • 这很棒。可能正是我需要的。非常感谢!
  • 您知道如何配置使用 FB JS SDK 的firebase.functions.httpsCallable('myfn') 调用自动使用自定义域而不是默认的https://us-central1-myapp.cloudfunctions.net/
  • 函数本身需要在 us-central1 还是托管?根据文档,我似乎无法判断。
  • @SebastianG 无论您的主机位于何处,如果主机重写为某个函数,则该函数必须位于 us-central1 中。
【解决方案3】:

如果其他人遇到这种情况,Thomas Bulva 的回答是正确的,但对我来说,我还必须从 firebase.json 文件中删除以下 sn-p。 .

它将任何请求重定向到 index.html 页面。我的https://us---.cloudfunctions.net URL 工作正常;当我执行 /helloWorld 时,它会将我带到“来自 Firebase 的您好!”但是,如果我从我的自定义域中尝试相同的操作,它将失败。删除它修复了它。

{
   "source": "**",
   "destination": "/index.html"
},

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2018-09-03
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多