アプリケーション全体を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_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 へのリダイレクトでデバイス リソースが維持されるようにするにはどうすればよいですか?
ありがとう