3

アプリケーション全体をforce_ssl有効にして、認証に Devise を使用しています。ただし、実稼働環境で http devise-path などにアクセスしようとするとhttp://domain.com/users/sign_in、パスの https バージョンにリダイレクトされますが、リソースは異なり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_inhttp://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