Rails:如何安全地存储邮件密码?

时间:2012-11-08 17:15:41

标签: ruby-on-rails

您好我在heroku和github上有我的rails应用程序,目前我在我的应用程序中使用了邮件:

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :user_name            => "myemail@gmail.com",
  :password             => "PasswordShouldGoHere",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

我不希望我的电子邮件和密码在我的github帐户上可见,因为人们只能登录并窃取我的信息。但是,如果我输入了一个假密码,那么当邮件发送时,我的应用程序会在heroku上给我一个错误。我知道我可以先将真实的电子邮件和密码推送到heroku,然后编辑它并将假密码放在我的github帐户上,但是有更好的方法吗?

3 个答案:

答案 0 :(得分:48)

与其他人一样,您可以使用ENV变量来实现此安全性。这是如何做到的:

config.action_mailer.smtp_settings = {
  user_name: ENV["MAILER_EMAIL"],
  password: ENV["MAILER_PASSWORD"]
}

现在,在生产(Heroku)中,您所要做的只是follow this guide。它基本上等于打开你的控制台并键入:

heroku config:set MAILER_EMAIL=email@example.com MAILER_PASSWORD=password

开发中,您可以在config / initializers文件夹中创建一个文件,其名称为app_env_vars.rb。在其中,放置以下内容:

ENV['MAILER_EMAIL'] = 'email@example.com'
ENV['MAILER_PASSWORD'] = 'password'

要阻止将新创建的文件推送到源代码管理中,您应该将其添加到.gitignore

/config/initializers/app_env_vars.rb

但是,有一个问题,因为初始化文件只在环境之后加载,所以还有最后一件事要做。转到您的environment.rb文件,然后添加以下 Yourapp::Application.initialize!

# Load the app's custom environment variables here, before environments/*.rb
app_env_vars = File.join(Rails.root, 'config', 'initializers', 'app_env_vars.rb')
load(app_env_vars) if File.exists?(app_env_vars)

你已经完成了!

但是,如果您发现所有这些配置都很麻烦,那么我建议您使用Figaro gem。它完成了我描述的所有内容以及更多内容!

答案 1 :(得分:4)

我建议使用figaro gem来管理配置设置。它使用ENV来存储设置,它确切地说是如何配置Heroku上的应用。

答案 2 :(得分:0)

看看这个Rails Apps Tutorial

“使用Gmail帐户”部分显示了此示例配置:

config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  domain: "example.com",
  authentication: "plain",
  enable_starttls_auto: true,
  user_name: ENV["GMAIL_USERNAME"],
  password: ENV["GMAIL_PASSWORD"]
}

并建议在服务器的~/.bashrc中设置变量:

export GMAIL_USERNAME="myname@gmail.com"
export GMAIL_PASSWORD="secret*"

如果应用服务器未从~/.bashrc读取环境,您可能需要将它们设置在其他位置。这非常依赖于您的应用服务器。