因此,我正在将我的应用程序从node express迁移到firebase-functions!
在我的node-express应用中,我有一个.env文件,其中包含所有数据,或者让入门者将其视为我的.env文件
GOOGLE_CLIENT_ID = 4046108-bssbfjohpj94l0dhpu69vpgs1ne0.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET = lTQHpj3yY57oQpO
然后在我的护照策略中,我有这样的东西
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: "/auth/google/callback",
userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo',
accessType: 'offline',
passReqToCallback: true
},
现在,
问题:1 -Firebase函数可能不支持.env文件,因此我们可以设置env变量而无需使用set标志手动添加它吗?假设我的环境中有很多变数
问题-2:我可以通过执行以下操作来访问设置的变量
firebase functions:config:set slack.url=https://hooks.slack.com/services/XXX
使用
process.env.slack.url
或者我们必须做(必要)
functions.config().slack.url
问题:3 是从Firebase Docs编写的
有些环境变量会自动填充到 函数运行时以及本地仿真的函数,包括:
process.env.GCLOUD_PROJECT:提供Firebase项目ID
process.env.FIREBASE_CONFIG:提供以下Firebase项目 配置信息:
它们的意思是什么?并且如果对第二个问题的回答是错误的,那么他们如何使用process.env.FIREBASE_CONFIG:
答案 0 :(得分:1)
请注意,目前,似乎没有一种使用firebase CLI工具将真正的环境变量与您的函数一起部署的方法。您可以改为将其作为function.config()
信息来提供,这是他们推荐的替代环境变量的方法。
如果您真的很想避免函数配置,那么“纯” google cloud函数支持设置环境变量。 This page是如何使用.env.yaml文件以及如何最终从代码库中的process.env访问这些值的演练。我知道您的文件不是* .yaml,但这是一个很好的解决方案(对YAML格式进行了一些小的重构)。
简短版本:
gcloud functions deploy FUNCTION_NAME --env-vars-file .env.yaml FLAGS
Firebase功能配置键/值对(即function.config()
)和process.env
访问之间存在区别。它们的目的相似,但是将数据保留在不同的位置(即,在Firebase的服务与实际环境变量中)。因此,访问每个文件的语法是不同的。
Firebase按照约定为您提供了一些process.env
变量。为了方便起见,他们只是在记录这些内容,因此您可以假定它们在那里并可以作为真实的环境变量使用(而不是function.config()
值)。
同样,截至目前,CLI工具似乎无法让您设置真实的环境变量。因此,您必须进行功能配置,或者进行类似于this的其他攻击,这些操作会使用您的功能配置键/值并将它们在运行时设置为环境变量。
const functions = require('firebase-functions');
const config = functions.config();
// Porting envs from firebase config
for (const key in config.envs){
process.env[key.toUpperCase()] = config.envs[key];
}