[RUBY-ON-RAILS] https에서 http로 3 SSL 라우팅 리디렉션 레일
RUBY-ON-RAILShttps에서 http로 3 SSL 라우팅 리디렉션 레일
이 질문이 SO 질문과 답변 (레일 -3- SSL 비하에 관한 ) 여기서 그와 같은 routes.rb 및 경로를 사용하여 레일 3 핸들 SSL에 제안 :
resources :sessions, :constraints => { :protocol => "https" }
# Redirect /foos and anything starting with /foos/ to https.
match "foos(/*path)", :to => redirect { |_, request| "https://" + request.host_with_port + request.fullpath }
내 문제는 링크가 상대 경로를 사용 (내가 올바른 용어 먹으 렴 생각)와 내가 HTTPS 페이지에있어 일단 사이트의 다른 페이지에있는 다른 모든 링크가 다음 https를 사용한다는 것입니다.
1) 무슨 HTTP 페이지로 다시 얻을 수있는 가장 좋은 방법은 어디에 필요하지 않습니다 HTTPS? 더 나은 방법이 내가 그들 모두 (내가 메모를 희망한다) 또는 대한 설정 리디렉션해야합니까. 리디렉션은 다음과 같이 될 것이다 :
match "foos(/*path)", :to => redirect { |_, request| "http://" + request.host_with_port + request.fullpath }
리디렉션이 필요한 HTTP에 백업하는 경우 2) 어떻게 내가 모든 방법을 제외한 HTTP 될하고자하는 경우를 처리합니까? 즉, FOOS (/ * 경로)는 모든 FOOS 방법이 될 것입니다. 하지만 SSL 사용에 FOOS / upload_foos를 원 말한다. 나는 그것을 필요로하는 방법을 알고
scope :constraints => { :protocol => "https" } do
match 'upload_foos' => 'foos#upload_foos', :via => :post, :as => :upload_foos
end
하지만 HTTPS upload_foos에 어떻게됩니까 FOOS 경로에 HTTP 리디렉션에 넣으면?
해결법
-
==============================
1.귀하의 모든 링크가 HTTP와 HTTPS 사이를 전환 할 수있게하려면, 당신은 _url 헬퍼에 _path 도우미와 스위치를 사용을 중지해야합니다.
귀하의 모든 링크가 HTTP와 HTTPS 사이를 전환 할 수있게하려면, 당신은 _url 헬퍼에 _path 도우미와 스위치를 사용을 중지해야합니다.
그 후, 프로토콜 매개 변수 범위를 사용하여 강제 및 프로토콜 제약 URL이 자동으로 전환합니다.
scope :protocol => 'https://', :constraints => { :protocol => 'https://' } do resources :sessions end resources :gizmos
이제 귀하의 의견에 :
<%= sessions_url # => https://..../sessions %> <%= gizmos_url # => http://..../gizmos %>
이것은 당신이 HTTPS에있을 때 HTTP로 돌아가 URL을 수정하지 않습니다. 당신이 url_for를 오버라이드 (override) 할 필요가 해결합니다.
module ApplicationHelper def url_for(options = nil) if Hash === options options[:protocol] ||= 'http' end super(options) end end
이것은 'HTTP'(도우미를 호출 할 때 경로 나)이 명시 적으로 설정하지 않는 한에 프로토콜을 설정합니다.
-
==============================
2.이것은 오래 전이었고, 나는 확실히 그것을 향상시킬 수있어,하지만 다시 레일의 일부 이전 버전에 나는 응용 프로그램 컨트롤러에서이 코드를했다. 확실하지이 여전히 레일 3 유효하지만, 약간의 도움이 될 수 있습니다 :
이것은 오래 전이었고, 나는 확실히 그것을 향상시킬 수있어,하지만 다시 레일의 일부 이전 버전에 나는 응용 프로그램 컨트롤러에서이 코드를했다. 확실하지이 여전히 레일 3 유효하지만, 약간의 도움이 될 수 있습니다 :
private SECURE_ACTIONS = { :login => ["login", "login_customer", "remind_password", "add_customer", "add_or_login_customer"], :store => ["checkout", "save_order"], :order => ["show"] } # Called as a before_filter in controllers that have some https:// actions def require_ssl unless ENV['RAILS_ENV'] != 'production' or @request.ssl? redirect_to :protocol => 'https://', :action => action_name # we don't want to continue with the action, so return false from the filter return false end end def default_url_options(options) defaults = {} if USE_EXPLICIT_HOST_IN_ALL_LINKS # This will OVERRIDE only_path => true, not just set the default. options[:only_path] = false # Now set the default protocol appropriately: if actions = SECURE_ACTIONS[ (options[:controller] || controller_name).to_sym ] and actions.include? options[:action] defaults[:protocol] = 'https://' defaults[:host] = SECURE_SERVER if defined? SECURE_SERVER else defaults[:protocol] = 'http://' defaults[:host] = NON_SECURE_SERVER if defined? NON_SECURE_SERVER end end return defaults end
USE_EXPLICIT_HOST_IN_ALL_LINKS은 일부 글로벌 구성 옵션했지만,이 무시할 수 있습니다.
HTTPS에 필요한 각 컨트롤러에서 나는 before_filter 추가 할 것 : require_ssl와 해당 컨트롤러 이름과 SECURE_ACTIONS에 메서드를 추가합니다. 이것은 아마도 필터, 또는 무언가 전에에 작업 이름을 전달하여 개선 될 수있다.
from https://stackoverflow.com/questions/3993651/rails-3-ssl-routing-redirects-from-https-to-http by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일 : (함께) 두 열의 유효성 검사 고유성 (0) | 2020.02.28 |
---|---|
[RUBY-ON-RAILS] 루비 온 레일즈 설치 - 맥 OS 라이온 (0) | 2020.02.28 |
[RUBY-ON-RAILS] 오류 mysql2 보석으로 응용 프로그램을 설치하려고 할 때 (0) | 2020.02.28 |
[RUBY-ON-RAILS] 어떻게 레일의 특정 작업에 대한 토큰 인증을 무시합니까? (0) | 2020.02.28 |
[RUBY-ON-RAILS] 무엇 레이크 DB를 수행합니다 테스트 : 실제로 할 준비? (0) | 2020.02.28 |