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帐户上,但是有更好的方法吗?
像其他人说的那样,你可以通过使用ENV
变量来实现这种安全性。 这是怎么做的:
config.action_mailer.smtp_settings = { user_name: ENV["MAILER_EMAIL"], password: ENV["MAILER_PASSWORD"] }
现在,在生产 (Heroku)中,您所要做的就是遵循本指南 。 它基本上相当于打开你的控制台并键入:
heroku config:set MAILER_EMAIL=email@example.com MAILER_PASSWORD=password
在开发中 ,您可以使用app_env_vars.rb
等提示名称在config / initializers文件夹中创建一个文件。 在其中,放置以下内容:
ENV['MAILER_EMAIL'] = 'email@example.com' ENV['MAILER_PASSWORD'] = 'password'
要防止将新创建的文件推送到源代码管理中,您应该将其添加到.gitignore
:
/config/initializers/app_env_vars.rb
但是,有一个问题,因为初始化文件只在环境之后加载,所以还有最后一件事要做。 转到environment.rb
文件并在Yourapp::Application.initialize!
之前添加以下内容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)
你完成了!
但是,如果您发现所有这些配置都很麻烦,那么我建议您使用费加罗gem 。 它完成了我描述的所有内容!
我建议使用figaro gem来管理配置设置。 它使用ENV
来存储设置,而这正是Heroku上的应用程序的配置方式。
看看这个Rails应用程序教程 。
“使用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
读取环境,您可能需要将它们设置在其他位置。 这非常依赖于您的应用服务器。