【问题标题】:How do I store keys for API's in Rails?如何在 Rails 中存储 API 的密钥?
【发布时间】:2013-12-27 03:53:09
【问题描述】:

我有几个要集成的 api,需要在我的应用程序的各个部分中调用。

存储密钥、用户/密码或令牌信息(例如配置文件)的方式是什么,然后如何调用它们以在应用程序的其他部分使用?

谢谢。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    为了让这个问题保持最新,Rails 4.1 中提供了一种新方法:

    From the Rails guides:

    Rails 4.1 在 config 文件夹中生成一个新的 secrets.yml 文件。默认情况下,此文件包含应用程序的 secret_key_base,但它也可用于存储其他机密,例如外部 API 的访问密钥。

    【讨论】:

      【解决方案2】:

      您可以将用户名/密码和类似的配置信息存储在 rails 已经使用的机制中;您可以将配置数据直接填充到您的环境配置文件中(其中配置了 productiontestingdevelopment),或者您可以使用自己的机制并且:

      require "yaml"
      config_hash = YAML::load_file("/path/to/your/config.yaml")
      

      【讨论】:

      • 你好,我想我没有按照config.yaml的样子,我不是已经有一个作为环境配置文件了吗?
      • 建议在 YAML 中维护自己的配置文件。这样做可以让您将特定于应用程序的配置与 Rails 配置分开。
      【解决方案3】:

      最简单的方法是将信息作为常量存储在各种环境文件中。这样您就可以使用不同的帐户进行开发、生产等。

      # Eg
      # development/environment.rb
      ....
      API_1_USER = "user101"
      API_1_PW = "secret!"
      

      另一种方法是创建一个 yaml 文件,然后在您的应用登录到 api 时读取它。这是rails本身在config/databse.yml文件中使用的样式

      添加

      您还可以使用散列或嵌套散列将其存储为常量。

      # Eg
      # development/environment.rb
      ....
      API_1 = {"user" => "user101", "pw" => "secret!"}
      API_2 = {"user" => "user102", "pw" => "double_secret"}
      
      # or nested hashes
      API_KEYS = {
                   "api_1" => {"user" => "user101", "pw" => "secret!"},
                   "api_2" => {"user" => "user102", "pw" => "double_secret"}}
      
      # using them in another file:
      foo.signin(API_1['user'], API_1['pw'])
      # or
      foo.signin(API_KEYS["api_1"]['user'], API_KEYS["api_1"]['pw'])
      
      # note, I use string constants instead of symbols to save vm (since the hash is
      # not referenced more than once or twice). You could also use
      # symbols as the keys, especially if the hash will be referenced often:
      API_1 = {:user => "user101", :pw => "secret!"}
      

      【讨论】:

      • 如果采用这种方法,我会投票支持嵌套哈希,而不是下划线常量。
      • 嵌套哈希的例子是什么?然后我将如何在需要 API 访问的控制器中调用它,就像 ALL CAP 变量一样?
      • 我添加了一个使用哈希作为常量的示例
      • 好的,我现在明白了,所以当我在另一个文件中使用时,我只是按照上面描述的方式放置它们......酷
      【解决方案4】:

      查看Configatron,它非常棒,完全可以用于此目的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-26
        • 2021-12-10
        • 2010-10-13
        • 2020-01-28
        相关资源
        最近更新 更多