我已经force_ssl
为我的整个应用程序启用了,并且正在使用 Devise 进行身份验证。但是,在生产中,当我尝试访问 http 设计路径(http://domain.com/users/sign_in
例如https://domain.com/admins/sign_in
.
这似乎取决于资源在 routes.rb 中给出的顺序。例如,如果我有:
devise_for :users
devise_for :admins
然后访问http://domain.com/admins/sign_in
将重定向到https://domain.com/users/sign_in
,而http://domain.com/users/sign_in
将保持正确的资源并重定向到https://domain.com/users/sign_in
。
如果我更改 routes.rb 中资源的顺序,则相反。
我已经force_ssl
在我的应用程序控制器中实现了一个非常略微定制的版本,以便以后能够将一些控制器操作指定为异常。
class ApplicationController < ActionController::Base
include ApplicationHelper
protect_from_forgery
#Re-implement force_ssl to allow override in controllers
def self.force_ssl(options = {})
host = options.delete(:host)
before_filter(options) do
if !request.ssl? && !Rails.env.development? && !(respond_to?(:allow_http?) && allow_http?)
redirect_options = {:protocol => 'https://', :status => :moved_permanently}
redirect_options.merge!(:host => host) if host
redirect_options.merge!(:params => request.query_parameters)
redirect_to redirect_options
end
end
end
force_ssl
end
如何确保设计资源在从 http 到 https 的重定向中得到维护?
谢谢