【问题标题】:Rails : How to store mailer password safely?Rails:如何安全地存储邮件密码?
【发布时间】:2012-11-08 17:15:41
【问题描述】:

您好,我在 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 帐户中,但是有没有更好的方法?

【问题讨论】:

  • 我已经读到了。你能告诉我环境变量是如何/在哪里设置的吗?

标签: ruby-on-rails


【解决方案1】:

正如其他人所说,您可以通过使用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。它完成了我所描述的一切,甚至更多!

【讨论】:

  • 我遇到了这个问题。设计中的 Net::SMTPAuthenticationError::PasswordsController#create
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    看看这个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 读取环境,您可能需要将它们设置在其他位置。这在很大程度上取决于您的应用服务器是什么。

    【讨论】:

      猜你喜欢
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 2016-04-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多