如何在Rails中存储第三方服务的凭据

时间:2012-07-06 15:29:13

标签: ruby-on-rails security capistrano

我正在通过SendGrid为我的rails应用程序发送的邮件设置重定向。 但是,我对告知存储凭证的方式并不满意。

指定there时,他们建议覆盖config / environment.rb文件中的ActionMailers默认值。我发现我的前任创建了一个初始化器/ smtp.rb文件,他在那里定义了以前的设置,但是通过发现这个文件,我发现了SMTP密码......

如果我修改了这些文件中的任何一个,那么有权访问git存储库的人就可以访问这些凭据(包括我们使用的前端和后端自由职业者)。

我正在考虑创建一个文件,该文件将保留在服务器的共享文件夹(例如database.yml文件)上,并且每次部署时都会通过capistrano与应用程序符号链接。

你怎么看?将此初始化程序/ smtp.rb移动到服务器的共享文件夹并在部署时将其符号链接是否可以?

2 个答案:

答案 0 :(得分:1)

我的建议(我所看到的):

将API密钥和敏感信息移至yml下的config/文件。

将此yml文件加载到变量中,例如

KEYS = YAML::load(File.open("#{RAILS_ROOT}/config/config.yml"))

瞧。

此外,例如,当您将代码放在GitHub上时,此config.yml将添加到.gitignore。相反,制作一个config-example.yml并告诉您的开发人员获取他们自己的密钥和密码等,并将其存储在本地config.yml

答案 1 :(得分:1)

如果您使用* nix

,环境变量是最佳方式

将变量粘贴在.bashrc文件中,如下所示:

// no need for quotation marks
export GMAIL_USER=my_gmail_user_name@gmail.com
export GMAIL_PASSWORD=my_gmail_password

并在你的smtp初始值设定项中调用它们,如下所示:

ActionMailer::Base.smtp_settings = {
  :user_name            => ENV['GMAIL_USER'],
  :password             => ENV['GMAIL_PASSWORD']
} 

重启bash和你的rails应用。一切都应该有效。 Heroku有一篇关于如何在他们的网络上使用env variables的好文章。