2012-11-08 30 views
22

Hi tôi có ứng dụng ray của tôi trên Heroku và github và hiện đang sử dụng một bưu phẩm trong ứng dụng của tôi:Đường ray: Cách lưu trữ mật khẩu người gửi an toàn?

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

Tôi không muốn email và mật khẩu của tôi để được hiển thị trên tài khoản github của tôi, vì mọi người có thể chỉ đăng nhập và ăn cắp thông tin của tôi. Tuy nhiên, nếu tôi đặt một mật khẩu giả, sau đó ứng dụng của tôi sẽ cho tôi một lỗi trên heroku khi bưu phẩm được cho là sẽ phân phối. Tôi biết tôi chỉ có thể đẩy email và mật khẩu thực lên heroku trước rồi chỉnh sửa và đặt mật khẩu giả vào tài khoản github của tôi, nhưng có cách nào tốt hơn không?

+0

Biến môi trường. –

+0

Tôi đã đọc về điều đó. Bạn có thể cho tôi biết cách đặt các biến môi trường chính xác không? – Edmund

Trả lời

46

Giống như những người khác đã nói, bạn có thể đạt được tính bảo mật này bằng cách sử dụng các biến số ENV. Dưới đây là làm thế nào để làm điều đó:

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

Bây giờ, trong sản xuất (Heroku), tất cả các bạn phải làm là follow this guide. Về cơ bản nó số tiền để mở bảng điều khiển của bạn và gõ những dòng này:

heroku config:set [email protected] MAILER_PASSWORD=password 

Trong phát triển, bạn có thể tạo một tập tin bên trong thư mục config/initializers với một tên gợi như app_env_vars.rb. Bên trong nó, đặt như sau:

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

Để ngăn chặn điều này tập tin mới được tạo ra từ bị đẩy vào kiểm soát nguồn của bạn, bạn nên thêm nó vào .gitignore của bạn:

/config/initializers/app_env_vars.rb 

Tuy nhiên, có một vấn đề vì initializer các tệp chỉ được tải sau môi trường, vì vậy có một điều cuối cùng cần làm. Tới tập tin environment.rb của bạn và thêm những điều sau đây trước các 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) 

Bạn đã hoàn tất!

Tuy nhiên, nếu bạn thấy tất cả cấu hình này là một rắc rối, thì tôi khuyên bạn nên sử dụng Figaro gem. Nó làm mọi thứ tôi mô tả và nhiều hơn nữa!

+0

Tôi đang gặp sự cố này.Net :: SMTPAuthenticationError trong Devise :: PasswordsController # create – xirukitepe

+2

@Ashitaka Hướng dẫn tuyệt vời! –

4

Tôi khuyên bạn nên sử dụng figaro gem để quản lý cài đặt cấu hình. Nó sử dụng ENV để lưu cài đặt và chính xác cách các ứng dụng trên Heroku được định cấu hình.

0

Hãy xem điều này Rails Apps Tutorial.

Phần "Sử dụng tài khoản Gmail" cho thấy ví dụ này cấu hình:

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"] 
} 

và gợi ý thiết lập các biến trong ~/.bashrc trên máy chủ của bạn:

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

Bạn có thể cần phải cài đặt chúng ở một nơi khác nếu máy chủ ứng dụng không đọc môi trường từ ~/.bashrc. Điều này phụ thuộc rất nhiều vào máy chủ ứng dụng của bạn.

Các vấn đề liên quan