我应该如何在ruby轨道上存储API的登录详细信息?

时间:2013-10-03 05:11:05

标签: ruby-on-rails ruby api login passwords

我正在使用Active Shipping Gem / API,您需要拥有登录名和密码才能连接各种邮政服务,例如:联邦快递或加拿大邮政。目前,我已将每个服务硬编码为控制器中的单独方法。我欢迎有关如何更安全地做到这一点的建议。谢谢

1 个答案:

答案 0 :(得分:1)

您可以在单独的文件中为所有密码执行此操作,然后不将该文件检入任何公共存储库。为此,您需要修改application.rb以查找包含所有密码的文件:

<强>配置/ application.rb中

...
# Moving ENV variables into one place (config/application.yml)
config = YAML.load(File.read(File.expand_path('../application.yml', __FILE__)))
config.merge! config.fetch(Rails.env, {})
config.each do |key, value|
  ENV[key] = value unless value.kind_of? Hash
end
...
module Myapp
  class Application < Rails::Application
  ...

config / application.yml (示例值)

## Rails
SECRET_TOKEN: 'asdfasfce336863e6asdfasdfasdf917ba42e6580fbbd42c01f19364a8f463ed377e46851360e3f282b0cdaf7b6332ed9e292c5e98e01acsasdf'

## Amazon
AWS_ACCESS_KEY_ID: 'ascdaewecaewewf'
AWS_SECRET_KEY: 'asdfasdcae/asdfac'
AWS_REDIRECT_URL: 'aws/success'

## Environment-specific
development:
  MAILER_HOST: "localhost:3000"
  REDISTOGO_URL: 'redis://@localhost:6379'
  S3_BUCKET_NAME: "myapp-staging"

test:
  MAILER_HOST: "test.local"
  REDISTOGO_URL: 'redis://@localhost:6379'
  S3_BUCKET_NAME: "myapp-staging"

production:
  MAILER_HOST: "myapp.com"
  S3_BUCKET_NAME: "myapp"
  S3_BUCKET_ADDRESS: "https://myapp.s3.amazonaws.com/"

然后,您可以通过环境变量在整个应用中访问此信息:

ENV['AWS_ACCESS_KEY_ID']

通常把密码放在哪里。

这样可以轻松地在一个地方更改任何内容,并且可以更轻松地管理哪些开发人员可以查看敏感信息。

修改

如果您有订阅,还有一个很好的Railscast:http://railscasts.com/episodes/85-yaml-configuration-revised