2012-11-08 9 views
22

Cześć Mam szyn aplikacji na Heroku i github i obecnie za pomocą programu pocztowego w mojej aplikacji:Szyny: Jak bezpiecznie przechowywać hasło pocztowe?

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

Nie chcę, mój e-mail i hasło, aby były widoczne na moim koncie github, ponieważ ludzie mogą po prostu zaloguj się i kradnij moje informacje. Jeśli jednak podaję fałszywe hasło, to moja aplikacja da mi błąd na heroku, gdy poczta ma dostarczać. Wiem, że mogę najpierw przekazać prawdziwy adres e-mail i hasło do Heroku, a następnie edytować i umieścić fałszywe hasło na moim koncie github, ale czy jest lepszy sposób?

+0

Zmienne środowiskowe. –

+0

Czytałem o tym. Czy możesz mi powiedzieć, w jaki sposób/gdzie dokładnie ustawione są zmienne środowiskowe? – Edmund

Odpowiedz

46

Tak jak powiedzieli inni, bezpieczeństwo można osiągnąć, używając zmiennych ENV. Oto jak to zrobić:

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

Teraz w produkcji (Heroku), wszystko co musisz zrobić, to follow this guide. To w zasadzie wynosi otwierając konsolę i wpisując to:

heroku config:set [email protected] MAILER_PASSWORD=password 

W rozwój, można utworzyć plik w katalogu config/initializers z sugestywną nazwą jak app_env_vars.rb. Wewnątrz niej umieścić następujące:

ENV['MAILER_EMAIL'] = '[email protected]' 
ENV['MAILER_PASSWORD'] = 'password' 

Aby zapobiec tej nowo utworzony plik z pchanych do swojej kontroli źródła, należy dodać go do .gitignore:

/config/initializers/app_env_vars.rb 

Istnieje jednak problem, ponieważ initializer pliki są ładowane tylko po środowisku, więc jest jeszcze jedna rzecz do zrobienia. Przejdź do pliku environment.rb i dodaj następujący przedYourapp::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) 

Gotowe!

Jeśli jednak wszystkie te konfiguracje są kłopotliwe, zalecam korzystanie z Figaro gem. Robi wszystko, co opisałem i wiele więcej!

+0

Mam ten problem.Net :: SMTPAuthenticationError in Devise :: PasswordsController # create – xirukitepe

+2

@Ashitaka Świetny samouczek! –

4

Polecam używanie figaro gem do zarządzania ustawieniami konfiguracji. Używa ona ENV do zapisywania ustawień i to właśnie konfiguruje aplikacje na Heroku.

0

Spójrz na to Rails Apps Tutorial.

W sekcji „Użyj konta Gmail” pokazuje ten przykład 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"] 
} 

i sugeruje ustawienie zmiennych w ~/.bashrc na serwerze:

export GMAIL_USERNAME="[email protected]" 
export GMAIL_PASSWORD="secret*" 

może trzeba ustawić je gdzieś indziej jeśli serwer aplikacji nie odczytuje środowiska z ~/.bashrc. Jest to bardzo zależne od tego, jaki jest serwer aplikacji.

Powiązane problemy