1

我正在使用 Active Shipping Gem/API,您需要拥有登录名和密码才能连接到各种邮政服务,例如 FedEx 或加拿大邮政。目前,我已将每个服务都硬编码到控制器中的单独方法中。我欢迎有关如何更安全地执行此操作的建议。谢谢你

4

1 回答 1

0

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

配置/应用程序.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

于 2013-10-03T05:31:52.090 回答