Firebase Web SDK 对所有 httpsCallable 请求使用自定义域
Firebase web SDK using custom domain for all httpsCallable requests
我们有一个使用 Firebase 后端的 React 应用程序。我们的一些大客户发现他们的网络安全会阻止对某些 URLs 的调用,其中 SSL 证书可能有问题。一个经常被阻止的 URL 是 cloudfunctions.net
,它被 Firebase Cloud Functions 用作默认的云函数端点。
我们不需要要求每个潜在客户更新他们的网络安全和白名单 cloudfunctions.net
,而是需要一个更强大的解决方案,使我们能够使用专用 SSL 证书在我们的自定义域中托管云功能。这个解决方案的大部分应该通过创建一个 GCP 静态 IP 地址来处理,并使用 GCP 负载均衡器将对该 IP 地址的调用重新路由到我们的云功能。
SO 上有很多关于使用 Firebase 托管将对自定义域的调用重新路由到云功能的文章,例如
没有清楚记录的是如何在使用 functions().httpsCallable
作为 firebase.functions()
的一部分时为您自己的 React 客户端初始化 firebase-js SDK 以调用自定义域。
当使用 httpsCallable 从我们的 Web 应用向云函数发出请求时:
const { data } = firebase.functions().httpsCallable('myFunction');
默认的 SDK 行为发出请求:
https://<region>-<firebase-project-id>.cloudfunctions.net/myFunction
官方文档含糊地提到了 initializing Firebase Functions with a region variable. They also share how to do this when initializing the client SDK here。
const functions = firebase().app().functions('region-string');
我想要实现的是更改 firebase-js SDK 的默认行为,以便在我的 React 客户端中调用云函数时,这些请求将调用我的自定义域(我使用的是 GCP 负载均衡器为云功能提供自定义域端点)。
事实证明,您可以使用 区域 或 自定义域的配置来提供 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 代码才能找到答案。
我们有一个使用 Firebase 后端的 React 应用程序。我们的一些大客户发现他们的网络安全会阻止对某些 URLs 的调用,其中 SSL 证书可能有问题。一个经常被阻止的 URL 是 cloudfunctions.net
,它被 Firebase Cloud Functions 用作默认的云函数端点。
我们不需要要求每个潜在客户更新他们的网络安全和白名单 cloudfunctions.net
,而是需要一个更强大的解决方案,使我们能够使用专用 SSL 证书在我们的自定义域中托管云功能。这个解决方案的大部分应该通过创建一个 GCP 静态 IP 地址来处理,并使用 GCP 负载均衡器将对该 IP 地址的调用重新路由到我们的云功能。
SO 上有很多关于使用 Firebase 托管将对自定义域的调用重新路由到云功能的文章,例如
没有清楚记录的是如何在使用 functions().httpsCallable
作为 firebase.functions()
的一部分时为您自己的 React 客户端初始化 firebase-js SDK 以调用自定义域。
当使用 httpsCallable 从我们的 Web 应用向云函数发出请求时:
const { data } = firebase.functions().httpsCallable('myFunction');
默认的 SDK 行为发出请求:
https://<region>-<firebase-project-id>.cloudfunctions.net/myFunction
官方文档含糊地提到了 initializing Firebase Functions with a region variable. They also share how to do this when initializing the client SDK here。
const functions = firebase().app().functions('region-string');
我想要实现的是更改 firebase-js SDK 的默认行为,以便在我的 React 客户端中调用云函数时,这些请求将调用我的自定义域(我使用的是 GCP 负载均衡器为云功能提供自定义域端点)。
事实证明,您可以使用 区域 或 自定义域的配置来提供 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 代码才能找到答案。