首页 文章

如何使用基于heroku应用程序名称的google api密钥

提问于
浏览
7

我为我的应用程序创建了一些不同的“环境”,这些环境托管在heroku上,所以我有:appName-staging.heroku.com appName-production.heroku.com

我想为这些应用程序使用不同的谷歌API密钥,我该怎么做?我创建了一个google.yml文件,如下所示:

开发:api_key:'ABCXYZ'

制作:api_key:'DEFXYZ'

所以我在本地开发时使用ABCSZY,而对于appName-production.heroku.com问题则使用DEFXYZ,如何让appName-staging.heroku.com使用不同的密钥?

由于部署到Heroku的每个应用程序都被认为是“ 生产环境 ”,appName-staging.heroku.com和appName-production.heroku.com都使用相同的密钥 .

2 回答

  • 0

    以前的答案肯定有效,但没有说明检查包含私钥到源控件的文件所带来的潜在安全威胁 . 在源代码管理中使用google.yml文件将允许任何有权访问您的repo的人查看您的私有API密钥 .

    更安全的解决方案是删除google.yml文件,并使用相同的密钥在登台和 生产环境 服务器上创建不同的环境变量:

    $ heroku config:add GOOGLE_API_KEY=<production key> --app appName-production
    $ heroku config:add GOOGLE_API_KEY=<development key> --app appName-staging
    

    然后,当需要时,您可以在代码中通过它来引用它

    ENV['GOOGLE_API_KEY']
    

    这将允许您共享代码而无需共享您的私有API密钥 .

    有关在Heroku上使用环境变量的更多信息,请访问https://devcenter.heroku.com/articles/config-vars

  • 5

    您可以为每个环境添加heroku config variable,允许您从应用程序中识别每个环境 .

    有点像:

    $ heroku config:add APP_NAME_ENV=production --app appName-production
    $ heroku config:add APP_NAME_ENV=staging --app appName-staging
    

    然后,您可以使用以下方法从应用内获取当前环境:

    ENV['APP_NAME_ENV']
    

    如果您将YAML文件作为类似于 GOOGLE_KEYS 的哈希值,则以下内容将返回给定环境的正确密钥:

    GOOGLE_KEYS[ENV['APP_NAME_ENV']]
    

相关问题