【问题标题】:How to safely store Google Api keys with rails and use them in scripts?如何使用 rails 安全地存储 Google Api 密钥并在脚本中使用它们?
【发布时间】:2016-09-28 19:35:27
【问题描述】:

我正在尝试安全地存储我在 rails 项目中使用的 Google api 密钥。我尝试将它存储在我的 secrets.yml 文件中,但如果我在我的谷歌脚本 &key=ENV['google_api'] 中说,它无法获取它。

我很确定这不是方法,但在谷歌搜索该主题后,我真的找不到明确的答案。谁能提供一些帮助?

谢谢, 托马斯

更新,这是我用来在我的布局文件中获取密钥的代码: 问题,我仍然收到我的 api_key 为“nil”的错误。

  <script>
    var GOOGLE_API_KEY="#{ENV['GOOGLE_API_KEY']}"
  </script>
  <%= javascript_include_tag "//maps.google.com/maps/api/js?v=3.23&key=#{ENV['GOOGLE_API_KEY']}&libraries=geometry,places&language=&hl=&region=&callback=initMap"%>

【问题讨论】:

    标签: ruby-on-rails google-maps-api-3 api-key


    【解决方案1】:

    您需要将脚本调用放在 application.html.erb 文件中,以便 ruby​​ 可以解析 ENV['google_api']。这是一个示例应用程序文件(在 HAML 中):

    !!!
    %html
      %head
        %title Pursuit
        = stylesheet_link_tag 'application', media: 'all'
        = csrf_meta_tags
    
        :javascript
          var GOOGLE_API_KEY="#{ENV['GOOGLE_API_KEY']}"
        = javascript_include_tag 'application'
        = javascript_include_tag "//maps.googleapis.com/maps/api/js?libraries=places&key=#{ENV['GOOGLE_API_KEY']}"
    
      %body
        = render 'layouts/menu'
        .row
          .col.m12.l10.offset-l1
            = yield
    

    【讨论】:

    • 我的应用需要再次访问 application.js 文件中的 env 变量,这就是我在这里设置它的原因。
    • 另外,如何在视图页面上执行此操作?还是您总是必须在 applications.html.erb 中提及它?
    • 更新,这是我在您的帮助下添加的脚本。但是它无法识别密钥并提到 apiKey = nil ... 有什么想法吗?
    • 应用程序布局包裹每一页,因此它在每一页上都可用。服务器可以访问密钥吗?在启动服务器时尝试这样做:GOOGLE_API_KEY=&lt;KEY&gt; rails s 其中 是您的 api 密钥(不要使用方括号)。另外,你能接受答案吗?
    • 嗨,我照你说的做了,但它似乎没有做任何事情。关键仍然是“nil”,因为我的 api_key 仍然没有被谷歌识别......关于如何做的任何提示继续?
    【解决方案2】:

    我使用的是figaro gem。对我来说,将环境变量添加到 application.yml 文件中。

    GOOGLE_API_KEY: there_put_the_key
    

    然后在上面 app/views/layouts/application.html.erb (如果您想将源添加到所有视图,否则您可以将此行添加到特定视图)只需添加此行

    <%= javascript_include_tag "//maps.google.com/maps/api/js?key=#{ENV['GOOGLE_API_KEY']}" %>
    

    【讨论】:

      最近更新 更多