Как хранить ключи для API в Rails?

У меня есть несколько api, с которыми я интегрирую и требую вызова в различных частях моего приложения.

Каким образом можно хранить ключи, информацию о пользователе/​​пароле или токене, скажем, файл конфигурации, а затем как я могу их назвать для использования в других частях приложения?

Спасибо.

Ответ 1

Проще всего хранить информацию как константы в различных файлах среды. Таким образом, вы можете использовать разные учетные записи для разработки, производства и т.д.

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

Альтернативой является создание файла yaml, а затем чтение его, когда ваше приложение подписывается на api. Это стиль, используемый самими рельсами с файлом 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!"}

Ответ 2

Чтобы этот вопрос был актуальным, есть новый способ сделать это в Rails 4.1:

Из направляющих Rails:

Rails 4.1 создает новый файл secrets.yml в папке config. По умолчанию этот файл содержит приложение secret_key_base, но его также можно использовать для хранения других секретов, таких как ключи доступа для внешних API.

Ответ 3

Вы можете хранить имена пользователей/пароли и аналогичную информацию о конфигурации в механизмах, которые уже используют рельсы; вы можете либо ввести данные конфигурации прямо в файлы конфигурации среды (где настроены production, testing и development), либо вы можете использовать свой собственный механизм и:

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

Ответ 4

Отъезд Configatron, это довольно удивительно и может быть использовано именно для этой цели.