我正在处理一个项目,其中我们使用Firebase中的预先存在的云函数。我们正在添加一个小型的React SPA,使用Firebase云托管,并且这个SPA将与一些现有的公共云函数进行交互。
到目前为止,我们一直在使用Firebase中的开发和生产项目。对于云函数,这很好用,我们使用
问题出现在托管的SPA联系云函数时。我看到了很多关于如何在托管代码中访问环境配置的问题,例如这个问题:如何从Firebase托管应用程序引用Firebase Functions配置变量? 其中答案似乎是要有Firebase函数返回环境变量的值,但对我来说,这只是将问题向后移动了一步。我完全理解,在浏览器中运行SPA会使环境变量对这段代码可访问是一个巨大的安全问题。
我真正需要的仅是托管的SPA的特定环境配置,即云函数的基本地址。
例如,如果我的云函数中有:
部署完毕后,该云函数可在以下两个网址访问:https://us-central1-DEV-PROJECT-NAME.cloudfunctions.net/test/hello/world 和 https://us-central1-PROD-PROJECT-NAME.cloudfunctions.net/test/hello/world。我应该如何最好地获取相应的根网址(https://us-central1-DEV-PROJECT-NAME.cloudfunctions.net 或者 https://us-central1-PROD-PROJECT-NAME.cloudfunctions.net),以便在部署SPA的项目中使用?例如,在前端JS代码中是否可以访问某些全局变量,从而执行以下操作:
并且,根据托管应用程序部署的项目来正确定义URL?
到目前为止,我们一直在使用Firebase中的开发和生产项目。对于云函数,这很好用,我们使用
firebase functions:config:set
设置环境特定配置来区分生产和开发服务器。问题出现在托管的SPA联系云函数时。我看到了很多关于如何在托管代码中访问环境配置的问题,例如这个问题:如何从Firebase托管应用程序引用Firebase Functions配置变量? 其中答案似乎是要有Firebase函数返回环境变量的值,但对我来说,这只是将问题向后移动了一步。我完全理解,在浏览器中运行SPA会使环境变量对这段代码可访问是一个巨大的安全问题。
我真正需要的仅是托管的SPA的特定环境配置,即云函数的基本地址。
例如,如果我的云函数中有:
const functions = require('firebase-functions');
const express = require('express');
const test = express();
test.on('/hello/:target', (req, res) => {
res.send(`Hello ${req.params.target}`);
})
exports.test = functions.https.onRequest(test);
部署完毕后,该云函数可在以下两个网址访问:https://us-central1-DEV-PROJECT-NAME.cloudfunctions.net/test/hello/world 和 https://us-central1-PROD-PROJECT-NAME.cloudfunctions.net/test/hello/world。我应该如何最好地获取相应的根网址(https://us-central1-DEV-PROJECT-NAME.cloudfunctions.net 或者 https://us-central1-PROD-PROJECT-NAME.cloudfunctions.net),以便在部署SPA的项目中使用?例如,在前端JS代码中是否可以访问某些全局变量,从而执行以下操作:
const url = `${__FIREBASE_GLOBALS__.cloudFunctions.baseUrl}/test/hello/${input}`;
并且,根据托管应用程序部署的项目来正确定义URL?
firebase.app().options
返回null
或undefined
。 - Shaun Luttin