2012-11-08 63 views
22

您好我有我的铁轨在Heroku和github上的应用程序,我目前使用我的应用程序邮包:Rails:如何安全地存储邮件密码?

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

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

+0

环境变量。 –

+0

我读过关于这个。你能告诉我如何/确切地说环境变量被设置了吗? – Edmund

回答

46

和其他人一样,你可以通过使用ENV变量来实现这个安全。以下是如何做到这一点:

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

现在,生产(Heroku的),所有你需要做的就是follow this guide。它基本上相当于打开你的控制台,输入此:

heroku config:set [email protected] MAILER_PASSWORD=password 

发展,您可以创建配置/初始化文件夹中的文件与像app_env_vars.rb暗示性的名字。它里面放置以下:

ENV['MAILER_EMAIL'] = '[email protected]' 
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。它可以完成我所描述的一切和更多!

+0

我有这个问题。Net :: SMTPAuthenticationError Devise :: PasswordsController#create – xirukitepe

+2

@Ashitaka很棒的教程! –

4

我会推荐使用figaro gem来管理配置设置。它使用ENV来存储设置,这正是Heroku上的应用程序的配置方式。

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="[email protected]" 
export GMAIL_PASSWORD="secret*" 

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

相关问题