Firebase Functions环境变量

时间:2019-02-19 22:07:57

标签: node.js firebase google-cloud-functions

因此,我正在将我的应用程序从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:

1 个答案:

答案 0 :(得分:1)

问题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

问题2的答案

Firebase功能配置键/值对(即function.config())和process.env访问之间存在区别。它们的目的相似,但是将数据保留在不同的位置(即,在Firebase的服务与实际环境变量中)。因此,访问每个文件的语法是不同的。

问题3的答案

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];
}