3

我已经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 的重定向中得到维护?

谢谢

4

0 回答 0