1
我使用Active Shipping Gem/API,您需要有登錄名和密碼才能連接到各種郵政服務,例如聯邦快遞或加拿大郵政。目前,我已將每項服務的硬編碼轉換爲控制器中的單獨方法。我歡迎有關如何更安全地做到這一點的建議。謝謝我應該如何在Ruby on Rails上存儲API的登錄細節?
我使用Active Shipping Gem/API,您需要有登錄名和密碼才能連接到各種郵政服務,例如聯邦快遞或加拿大郵政。目前,我已將每項服務的硬編碼轉換爲控制器中的單獨方法。我歡迎有關如何更安全地做到這一點的建議。謝謝我應該如何在Ruby on Rails上存儲API的登錄細節?
你可以在一個單獨的文件中爲你的所有密碼做到這一點,然後不檢查該文件到任何公共回購站。要做到這一點,你需要修改application.rb
尋找與所有的密碼文件:
的config/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
...
配置/ 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