Подтвердить что ты не робот

Rails: Как безопасно хранить почтовый пароль?

Привет, у меня есть приложение rails на heroku и github, и в настоящее время я использую почтовую программу в своем приложении:

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

Я не хочу, чтобы мой адрес электронной почты и пароль отображались на моей учетной записи github, так как люди могут просто войти в систему и украсть мою информацию. Однако, если я поместил поддельный пароль, тогда мое приложение сообщит мне ошибку о героике, когда должна отправиться почтовая программа. Я знаю, что я могу просто подтолкнуть настоящую электронную почту и пароль к герою сначала, а затем отредактировать ее и поместить поддельный пароль в мою учетную запись github, но есть ли лучший способ?

4b9b3361

Ответ 1

Как и другие люди, вы можете достичь этой безопасности, используя переменные ENV. Вот как это сделать:

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

Теперь в production (Heroku) все, что вам нужно сделать, это следовать этому руководству. В основном это сворачивает консоль и набирает ее:

heroku config:set [email protected] MAILER_PASSWORD=password

В разработке вы можете создать файл в папке config/initializers с наводящим название, например 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 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)

Вы закончили!

Однако, если вы обнаружите, что вся эта конфигурация затруднена, я рекомендую использовать драгоценный камень Фигаро. Он делает все, что я описал, и многое другое!

Ответ 2

Я бы рекомендовал использовать figaro gem для управления настройками конфигурации. Он использует ENV для сохранения настроек, и точно, как настроены приложения на Heroku.

Ответ 3

Взгляните на это Учебное пособие по Rails-приложениям.

В разделе "Использование учетной записи Gmail" показан этот пример config:

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. Это очень зависит от вашего сервера приложений.