2013-08-29 37 views
0

我目前正在試圖找出一種方法來強制http對於某些路由(更快,不需要安全性)並強制https更敏感的頁面。我看到了這個答案:Rails 3 SSL Deprecation,但它似乎沒有工作。Rails 3:在某些地方強制使用HTTP,並在其他地方強制使用HTTPS?

我說在我的根URL一個範圍:

scope :constraints => { :protocol => 'http' } do 
    root :to => 'site#index' 
end 

但它只是把錯誤No route matches [GET] "/"當我試圖去爲localhost:3000。

有沒有乾淨的方式來強制HTTP在一些地方,強迫他人HTTPS(我可以在我的控制器使用force_ssl,但有一個force_http?)在455元範圍看起來乾淨,但它不工作爲了我。我做錯了嗎?

這樣的方法怎麼樣?

CONTROLLERS_THAT_REQUIRE_SSL = ['check_out'] 
def ensure_proper_protocol 
    unless Rails.env.development? || Rails.env.test? 
    if request.protocol["https"] && !CONTROLLERS_THAT_REQUIRE_SSL.include?(params[:controller]) 
     redirect_to "http://" + request.host + request.path 
    end 
    end 
end 

回答

0

不知道這個博客將是任何你有幫助: Always-On HTTPS With Rails Behind an ELB 也這也可能是使用你的考慮你正在試圖迫使你的應用程序的某些部分使用https。 SSL Requirement。它在關於SSL要求的章節中詳細說明了添加聲明方式,指定某些操作只應允許在SSL下運行。如果你想指定SSL整個控制器然後調用ssl_exceptions

或者你可以嘗試通過執行類似

class ApplicationController < ActionController::Base 
    before_filter do 
    if request.ssl? || Rails.env.production? 
     redirect_to :protocol => 'http://', status => :moved_permanently 
    end 
    end 
end 

希望寫一個before_filter這有助於

0

尋找它不回答後看起來它存在,所以我創建了一個force_http寶石...這是我的第一個寶石,我沒有真正測試它,但看看你們中的任何人是否面臨同樣的問題:

gem install force_http安裝它,或者您可以在這裏找到它:https://github.com/EdmundMai/force_http。您只需將force_http放入控制器中,就像您使用force_ssl一樣。它本質上恰恰相反。我查看了源代碼,並將它配置爲重定向到http://而不是https:// request.ssl時?

+0

如何在特定的控制器方法中實現它? – xirukitepe