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