如果您希望您的整个应用程序通过https提供服务,那么自从Rails 4.0以来,最好的方法是在配置文件中启用force_ssl
,如下所示:
Rails.application.configure do
config.force_ssl = true
end
默认情况下,这个选项已经在新生成的应用程序中的 config/environments/production.rb
中存在,但被注释掉了。
正如注释所说,这不仅会重定向到 https,还会设置Strict-Transport-Security
头部(HSTS)并确保所有 Cookie 上设置了安全标志。这两个措施都可以增加应用程序的安全性而几乎没有副作用。它使用了ActionDispatch:SSL
。
HSTS 过期设置默认为一年,不包括子域名,这对大多数应用程序来说可能是可以接受的。您可以使用hsts
选项进行配置:
config.hsts = {
expires: 1.month.to_i,
subdomains: false,
}
如果你正在运行
Rails 3(>=3.1),或者不想为整个应用程序使用https,则可以在控制器中使用
force_ssl
方法:
class SecureController < ApplicationController
force_ssl
end
就这些了。您可以在每个控制器中设置它,或者在您的ApplicationController
中设置。您可以使用熟悉的if
或unless
选项有条件地强制使用https;例如:
force_ssl unless: -> { Rails.env.in? ['development', 'test'] }