2010-10-05 12 views
20

में ssl_requirement का उपयोग कर एसएसएल फोर्स करें मेरे पास एक रेल एप्लिकेशन है जिसे SSL के अंतर्गत चलाने की आवश्यकता है। मैंने ssl_requirement की कोशिश की लेकिन मुझे लगता है कि मुझे हर नियंत्रकों में सभी कार्यों में टाइप करना होगा।रेल 2 एप

क्या कोई तरीका है कि मैं ssl_requirement के साथ एप्लिकेशन नियंत्रक में पहले_फिल्टर जोड़ सकता हूं, ताकि जब उपयोगकर्ता अनुरोध http में हो तो ऐप्स स्वचालित रूप से https पर रीडायरेक्ट हो जाएंगे?

धन्यवाद सब कुछ। :)

+0

धन्यवाद जोड़ने के लिए। शीर्षक बदल गया :) –

उत्तर

32

उपयोग एक Rack Middleware में एक before_filter में नहीं ssl में है या परीक्षण की कोशिश कर सकते हैं।

# lib/force_ssl.rb 
class ForceSSL 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    if env['HTTPS'] == 'on' || env['HTTP_X_FORWARDED_PROTO'] == 'https' 
     @app.call(env) 
    else 
     req = Rack::Request.new(env) 
     [301, { "Location" => req.url.gsub(/^http:/, "https:") }, []] 
    end 
    end 
end 

# config/environment.rb 
config.middleware.use "ForceSSL" 
+0

यह अच्छी तरह से काम कर रहा है। धन्यवाद दोस्त। :) –

+2

'lib/force_ssl.rb' डिफ़ॉल्ट रूप से Rails 3.0.X में शामिल नहीं किया जाएगा। आपको इस लाइन को अपने 'application.rb' में जोड़ना होगा: 'File.expand_path (' ../../ lib/force_ssl.rb ', __FILE __) की आवश्यकता है या किसी अन्य प्रकार की' आवश्यकता 'को कहीं और करें। साथ ही, 'config.middleware.use "ForceSSL" 'लाइन को' config/वातावरण/production.rb' में जाना चाहिए। –

+6

सिमोन कार्लेटी द्वारा बताए गए अनुसार, रेल में> = 3.1 वहां एक force_ssl विधि उपलब्ध है। Http://www.simonecarletti.com/blog/2011/05/configuring-rails-3-https-ssl/ –

4

यदि अनुरोध आपके आवेदन

class Application < AC::Base 

    before_filter :need_ssl 

    def need_ssl 
    redirect_to "https://#{request.host}/#{request.query_string}" unless request.ssl? 
    end 
end 
+0

ओह ... मुझे एक त्रुटि मिली। अपरिभाषित विधि 'एसएसएल?' –

+1

शायद आप रेल 3 में नहीं हैं? – shingara

+0

मैं अभी भी रेल 2 में हूं ... तो यह रेल 3 में है, है ना? –

1

मुख्य समस्या यह है कि force_ssl.rb लोड नहीं किया जा रहा है और कहा कि lib रेल 3.1 में डिफ़ॉल्ट रूप से लोड नहीं है। आप अनुस्मारक के लिए

config.autoload_paths += %W(#{config.root}/lib) 
config.autoload_paths += Dir["#{config.root}/lib/**/"] 

application.rb को