【问题标题】:Firebase web SDK using custom domain for all httpsCallable requestsFirebase Web SDK 对所有 httpsCallable 请求使用自定义域
【发布时间】:2021-10-21 14:32:09
【问题描述】:

我们有一个使用 Firebase 后端的 React 应用程序。我们的一些大客户发现他们的网络安全阻止了对 SSL 证书可能有问题的某些 URL 的调用。一个经常被阻止的 URL 是 cloudfunctions.net,Firebase Cloud Functions 将其用作默认的云函数端点。

与其要求每个潜在客户更新他们的网络安全和白名单cloudfunctions.net,我们需要有一个更强大的解决方案,让我们能够使用专用 SSL 证书在我们的自定义域中托管云功能。此解决方案的大部分内容应通过创建 GCP 静态 IP 地址并使用 GCP 负载均衡器将对该 IP 地址的调用重新路由到我们的云函数来处理。

有很多关于 SO 的文章关于使用 Firebase 托管将调用重新路由到您的自定义域通过您的云功能,例如 Use custom domain for firebase function http calls

没有清楚记录的是如何在将functions().httpsCallable 用作firebase.functions() 的一部分时为您自己的React 客户端初始化firebase-js SDK 以调用自定义域。

当使用 httpsCallable 从我们的网络应用向云函数发出请求时:

const { data } = firebase.functions().httpsCallable('myFunction');

默认 SDK 行为向:

https://<region>-<firebase-project-id>.cloudfunctions.net/myFunction

官方文档对initializing Firebase Functions with a region variable 的引用含糊不清。他们还分享how to do this when initializing the client SDK here

const functions = firebase().app().functions('region-string');

我想要实现的是更改 firebase-js SDK 的默认行为,以便在我的 react 客户端中调用云函数时,这些请求将调用我的自定义域(我使用 GCP 负载均衡器来提供云功能的自定义域端点)。

【问题讨论】:

    标签: firebase google-cloud-functions


    【解决方案1】:

    事实证明,您可以通过 either 区域 OR 自定义域的配置来提供 firebase-js SDK 功能。这在SDK code repository here 中显示。

    因此,为了确保您的客户始终对您的自定义域进行 httpsCallable 事务,您可以像这样初始化 Firebase 函数:

    firebase.initializeApp({
      apiKey: '### FIREBASE API KEY ###',
      authDomain: '### FIREBASE AUTH DOMAIN ###',
      projectId: '### CLOUD FUNCTIONS PROJECT ID ###'
      databaseURL: 'https://### YOUR DATABASE NAME ###.firebaseio.com',
    });
    
    // Initialize Cloud Functions through Firebase
    const functions = firebase.app().functions('https://customdomain.com/');
    

    注意:此解决方案还要求您配置 DNS 配置以将您的自定义域重定向到 GCP 负载均衡器。将负载均衡器与 urlMap 结合使用时,您可以将对 https://customdomain.com/myFunction 的调用路由到您的 myFunction 云函数。

    完整的交易如下所示:

    客户端 SDK -> httpsCallable -> 自定义域 -> GCP 静态 IP -> GCP Load Balancer -> GCP urlMap -> GCP 云函数后端网络组 -> 云函数。

    您可以在此处找到有关配置 GCP 负载平衡器和无服务器 NEG 的说明:https://cloud.google.com/load-balancing/docs/https/setting-up-https-serverless#cloud-functions

    我希望这可以节省其他人的搜索量。我很惊讶我需要阅读 firebase-sdk 代码才能找到答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-27
      • 2018-10-17
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 2021-04-11
      • 2019-04-06
      • 2012-09-27
      相关资源
      最近更新 更多