Nếu bạn muốn toàn bộ ứng dụng của bạn để được phục vụ trên https sau đó kể từ Rails 4.0 cách tốt nhất để làm điều này là để cho phép force_ssl
trong file cấu hình như vậy:
# config/environments/production.rb
Rails.application.configure do
# [..]
# Force all access to the app over SSL, use Strict-Transport-Security,
# and use secure cookies.
config.force_ssl = true
end
Theo mặc định này tùy chọn đã có trong config/environments/production.rb
trong các ứng dụng mới được tạo nhưng đã được nhận xét.
Khi nhận xét cho biết, điều này sẽ không chỉ chuyển hướng đến https, mà còn đặt tiêu đề Strict-Transport-Security
(HSTS) và đảm bảo rằng cờ an toàn được đặt trên tất cả cookie. Cả hai biện pháp làm tăng tính bảo mật của ứng dụng của bạn mà không có những hạn chế đáng kể. Nó sử dụng ActionDispatch:SSL
.
Cài đặt HSTS hết hạn được đặt thành một năm theo mặc định và không bao gồm tên miền phụ, có thể là tốt cho hầu hết các ứng dụng. Bạn có thể cấu hình này với hsts
tùy chọn:
config.hsts = {
expires: 1.month.to_i,
subdomains: false,
}
Nếu bạn đang chạy Rails 3 (> = 3.1) hoặc không muốn sử dụng https cho toàn bộ ứng dụng, sau đó bạn có thể sử dụng phương pháp force_ssl
trong bộ điều khiển:
class SecureController < ApplicationController
force_ssl
end
Đó là tất cả. Bạn có thể đặt nó trên mỗi bộ điều khiển hoặc trong số ApplicationController
. Bạn có thể buộc https có điều kiện bằng cách sử dụng các tùy chọn if
hoặc unless
quen thuộc; ví dụ:
# Only when we're not in development or tests
force_ssl unless: -> { Rails.env.in? ['development', 'test'] }
Tôi có thể làm rõ câu hỏi của bạn không. Bạn có muốn buộc mọi người luôn sử dụng HTTPS trên trang web của mình hay chỉ cho một số URL? RAILS mặc định sẽ tiếp tục sử dụng HTTPS nếu yêu cầu hiện tại là HTTPS. – scottd