2011-09-28 3 views
1

https/http 사이트를 혼합하고 싶습니다.레일 3, https에서 https로 리디렉션, _path 도우미 덮어 쓰기

또한 https에서 http로 리디렉션하고 싶습니다 (예 : 사용자가 성공적으로 로그인 한 후 http의 루트 페이지로 리디렉션해야 함).

보석 같은 :

  • 랙 SSL
  • 랙 SSL-집행자

완벽하게 작동하지만 당신이 HTTPS에서 전체 사이트를 갖고 싶어 "혼합 HTTP/HTTPS" A, B, C 작업에서 SSL 만 사용하고 D, E, F에서는 http 만 - 작업하지 마십시오.

나는 다른 SO 스레드에서 해결책을 확인 :

Rails 3 SSL routing redirects from https to http

가 거의 작동합니다. (전체보기에서) 도우미를 "_path"에서 "_url"로 변경하는 스크립트를 작성하기 쉽습니다.

그러나 같은 링크에 문제가있는 것입니다 : 그와 함께 일을 해달라고합니다 '재 작성'스크립트를 기반으로

<%= link_to "model", some_model %> 
<%= link_to "edit model", edit_mode_url(model) %> 
... 

많은 diffrent 모델이 있고 나는 반복 블록에서 종종 "모델"을 사용하므로 솔루션.

질문 :

그 문제를 해결하기 위해 <%= link_to 'model', model %> 코드의 동작을 변경하는 방법이 있나요? 경로 도우미를 덮어 쓸 가능성이 있습니까 (표준 프로토콜은 http 일 것입니다 - 매개자 매개 변수 - https)?

아니면 내가 아직 발견하지 못한 다른 해결책이 있습니까?

편집 : 나는 레일 3.0.9 작업

.

답변

0

사용이 보석 :

gem install ssl_requirement

https://github.com/retr0h/ssl_requirement

이 그런 다음 컨트롤러에 ssl_required :new, :destroy #others actions 를 추가 할 수 있습니다. 당신이 고안 사용하는 경우

당신은 그것은 레일 3.0와 함께 작동 모든 작업

devise_for :users, :controllers => { :confirmations => "confirmations", :omniauth_callbacks => "omniauth_callbacks", :passwords => "passwords", :registrations => "registrations", :sessions => "sessions", :unlocks => "unlocks" } do 
# etc 
end 

각 컨트롤러를 덮어 지정해야합니다.X

1

특정 경로

에 HTTPS를 추가 할 경우 당신은을 수행하여 단순히 before_filter 조치로 사용하려는 당신은 경로를 정의 할 수 있습니다이 코드

before_filter :redirect_to_https 
def redirect_to_https 
    redirect_to :protocol => "https://" unless (request.ssl? || request.local?) 
end 

을 사용할 수 있습니다 다음

before_filter :redirect_to_https, :except => [:action1 , :action2] 
before_filter :redirect_to_https, :only => [:action1 , :action2]