2012-02-28 5 views
9

रेल 3.1+ मैं चाहता हूं कि मेरे यूआरएल हेल्पर्स प्रत्येक सहायक I कॉल में निर्दिष्ट किए बिना https प्रोटोकॉल का उपयोग करें।सभी रेल मददगारों में https में प्रोटोकॉल बदलें

ROUTES_PROTOCOL = (ENV["RAILS_ENV"] =~ /development/ ? 'http://' : 'https://') 

scope :protocol => ROUTES_PROTOCOL, :path => "/app" do 

यह कैसे किया जा सकता है: चारों ओर मैं विभिन्न तरीकों, लेकिन कोई भी काम करते हैं, उदाहरण के लिए मिल गया है खोज करने के बाद?

उत्तर

0

जो भी पर्यावरण आप SSL (https: //) का उपयोग करना चाहते हैं, बस config/environments में अपनी विन्यास फाइल करने के लिए इस config पंक्तियां जोड़ें: आप अपने आवेदन पर एसएसएल मजबूर करने के लिए चाहते हैं

YOURAPPNAME::Application.configure do 

    # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 
    config.force_ssl = true 
end 
+2

अनुरोध प्रोटोकॉल http पर रीडायरेक्ट का कारण बन जाएगा, लेकिन मैं मुख्य रूप से ईमेल में लिंक के लिए यूआरएल हेल्पर्स में https चाहता हूं। – 99miles

1

, इस किया जा सकता है अपने application.rb (या आपके पर्यावरण विशिष्ट फ़ाइल) में config.force_ssl को सही पर सेट करके किया गया। विषय here

संपादित ठीक है पर अधिक तो मैं पर्याप्त सबूत इस बात के लिए नहीं मिल रहा है, लेकिन मुझे लगता है कि आप आवेदन नियंत्रक में default_url_options=(options={}) ओवरराइड कर सकते हैं, और समारोह शरीर में :protocol => :https निर्धारित किया है। यदि यह आपके ईमेल के लिए चाल नहीं है, तो आपको config.action_mailer.default_url_options जोड़कर अपनी पर्यावरण कॉन्फ़िगरेशन में प्रक्रिया को दोहराना होगा। उम्मीद है कि यह करता है!

+1

कि एक रीडायरेक्ट का कारण होगा जब अनुरोध प्रोटोकॉल http है, लेकिन मैं यूआरएल सहायकों में https, मुख्य रूप से ईमेल में लिंक के लिए करना चाहते हैं। – 99miles

0

रेल 3.2.1 में, डिफ़ॉल्ट रूप से force_ssl सच है, के

  1. ओपन config/वातावरण/production.rb की जाँच करें और खोज "config.force_ssl"

config.force_ssl जाने = true -

अब कॉन्फ़िगर/वातावरण/विकास.आरबी - में config.force_ssl रखने की कोई आवश्यकता नहीं है, यह काम करना चाहिए, क्योंकि आपका सर्वर स्थानीय रूप से चल रहा है।

ठीक है, यहाँ अन्य दृश्य

if !request.ssl? 
    "https://" + request.host + request.request_uri 
elsif request.ssl? 
    "http://" + request.host + request.request_uri 
end 

ऊपर यदि किसी और पर और ActionView::Helpers में सहायक आधार में डीईएफ़ जोड़े है, वहाँ एक url_for विधि है कि आप प्राप्त कर सकते हैं है कि आप क्या चाहते है, तो आपको लगता है कि का उपयोग शुरू ।

+1

कि एक रीडायरेक्ट का कारण होगा जब अनुरोध प्रोटोकॉल http है, लेकिन मैं यूआरएल सहायकों में https, मुख्य रूप से ईमेल में लिंक के लिए करना चाहते हैं। – 99miles

+0

@ 99miles - मैं बदल जवाब है, कृपया जांच करें, मुझे पता है अगर यह आपके लिए काम करता है। –

12

तो क्या आप इसे मुख्य रूप से ईमेल में लिंक के लिए चाहते हैं?

मुझे लगता है कि यह आपके उत्पादन.आरबी, विकास.आरबी या किसी अन्य वातावरण में काम करेगा।

config.action_mailer.default_url_options = { 
    :host => 'yourwebsite.com', 
    :protocol => 'https' 
} 

# Makes it possible to use image_tag in mails 
config.action_mailer.asset_host = "https://yourwebsite.com" 
12

आप रेल 4 उपयोग कर रहे हैं, को परिभाषित करने ApplicationController#default_url_options काम नहीं करता।URL विकल्प अब आवेदन के मार्गों config में परिभाषित कर रहे हैं:

Rails.application.routes.draw do 
    default_url_options protocol: :https 
end 
+10

मैंने निम्नलिखित को अपनी उत्पादन.आरबी फ़ाइल में रखा है। 'Rails.application.routes.default_url_options [: प्रोटोकॉल] = 'https'' – gitb

+0

केवल रेल 5.1.4 के लिए कंसोल के तहत काम करता है। – lulalala

0

मैं ऊपर सभी प्रश्नों के उत्तर की कोशिश की करने के लिए बाहर की जाँच कर सकते हैं केवल जोड़ सकते हैं, यह मेरे लिए काम करता है:

config/वातावरण/production.rb

01,235,
Rails.application.routes.default_url_options[:protocol] = 'https' 

माणिक 2.1.4p265 (2014-10-27 संशोधन 48166) [x86_64-linux] रेल 3.2.22.5

0

रेल 5.1.4 में, मैं निम्न परिदृश्यों का परीक्षण किया है:

# in development.rb 
config.action_controller.default_url_options({:protocol => 'https'}) 
config.action_controller.default_url_options(:protocol => 'https') 
# Does not work 

# in development.rb, outside config block 
Rails.application.routes.default_url_options[:protocol] = 'https' 
# Does not work, but works under console 

# in routes.rb 
Rails.application.routes.draw do 
    default_url_options protocol: :https 
# Does not work, but works under console 

# in ApplicationController 
def default_url_options(options={}) 
    { secure: true } 
end 
# Does not work 

# in ApplicationController 
def default_url_options 
    { protocol: :https } 
end 
# Works in browser, but does not work under console 

# in development.rb 
config.action_controller.default_url_options= {:protocol => 'https'} 
# Works in browser, but does not work under console 
संबंधित मुद्दे