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读取环境,您可能需要将它们设置在其他位置。 这非常依赖于您的应用服务器。