2011-09-28 55 views
1

我想要混合https/http站點。Rails 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) %> 
... 

有許多不同勢模型,我經常使用的「模式」,在迭代塊,這樣的解決方案。

問題:

有沒有辦法改變的<%= link_to 'model', model %>代碼的行爲來解決這個問題?有沒有可能覆蓋路徑助手(標準協議將http,在giver參數 - https)?

或者也許有另一種解決方案,我還沒有找到?

編輯:

我使用Rails 3.0.9的工作。

回答

0

使用這種寶石:

https://github.com/retr0h/ssl_requirement

gem install ssl_requirement

然後添加ssl_required :new, :destroy #others actions 到您的控制器。

如果您使用的設計,你必須覆蓋每個控制器,並指定所有操作

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

它的工作原理和Rails 3.0。X

1

如果您想爲https添加到特定路線

您可以使用此代碼

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

您可以定義路由你想與的before_filter動作簡單地通過執行使用以下

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