2012-02-28 20 views
9

Rails 3.1+ Tôi muốn người trợ giúp url của tôi sử dụng giao thức https mà không phải chỉ định nó trong mọi trợ giúp tôi gọi. Sau khi tìm kiếm xung quanh tôi đã tìm thấy nhiều cách khác nhau nhưng không có cách nào hoạt động, ví dụ:Thay đổi giao thức thành https trong tất cả những người giúp đỡ đường ray

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

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

Làm cách nào để thực hiện điều này?

Trả lời

0

Cho dù môi trường bạn muốn sử dụng ssl (https: //), chỉ cần thêm này dòng cấu hình để tập tin cấu hình của nó trong config/environments:

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

Điều đó sẽ gây ra chuyển hướng khi giao thức yêu cầu là http, nhưng tôi muốn https trong bộ trợ giúp url, chủ yếu cho các liên kết trong email. – 99miles

1

Nếu bạn muốn để buộc SSL trên ứng dụng của bạn, điều này có thể được thực hiện bằng cách đặt config.force_ssl thành true trong application.rb (hoặc tệp môi trường cụ thể của bạn). Thông tin thêm về chủ đề here

EDIT Ok vì vậy tôi không tìm thấy đủ bằng chứng cho điều này, nhưng tôi nghĩ rằng bạn có thể ghi đè default_url_options=(options={}) trong điều khiển ứng dụng, và thiết lập :protocol => :https trong thân hàm. Nếu điều này không phải là mẹo cho email của bạn, bạn sẽ phải lặp lại quy trình trong cấu hình môi trường của mình bằng cách thêm config.action_mailer.default_url_options. Hy vọng điều này làm điều đó!

+1

Điều đó sẽ gây ra chuyển hướng khi giao thức yêu cầu là http, nhưng tôi muốn https trong bộ trợ giúp url, chủ yếu cho các liên kết trong email. – 99miles

0

Trong Rails 3.2.1, theo mặc định force_ssl là sự thật, chúng ta hãy kiểm tra

  1. mở config/môi trường/production.rb và tìm kiếm "config.force_ssl"

config.force_ssl = true - không cần phải thay đổi

hiện tại trong cấu hình/môi trường/phát triển.rb - không cần phải đặt config.force_ssl, nó sẽ hoạt động vì máy chủ của bạn chạy cục bộ.

Ok, đây là quan điểm khác

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

Thêm def trong cơ sở trợ giúp trên trên nếu khác và trong ActionView::Helpers, có một phương pháp url_for mà có thể giúp bạn có được những gì bạn muốn nếu bạn bắt đầu sử dụng mà .

+1

Điều đó sẽ gây ra chuyển hướng khi giao thức yêu cầu là http, nhưng tôi muốn https trong bộ trợ giúp url, chủ yếu cho các liên kết trong email. – 99miles

+0

@ 99miles - Tôi đã thay đổi câu trả lời, Vui lòng kiểm tra, cho tôi biết nếu điều này phù hợp với bạn. –

12

Vì vậy, bạn muốn nó chủ yếu cho các liên kết trong email?

Tôi nghĩ điều này sẽ hoạt động trong production.rb, development.rb của bạn hoặc bất kỳ môi trường nào khác.

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

Nếu bạn đang sử dụng Rails 4, xác định ApplicationController#default_url_options không hoạt động.tùy chọn URL hiện được xác định trong các tuyến đường của ứng dụng cấu hình:

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

Tôi đã đặt thông tin sau vào tệp production.rb của mình. 'Rails.application.routes.default_url_options [: protocol] = 'https'' – gitb

+0

Chỉ hoạt động trong giao diện điều khiển cho Rails 5.1.4. – lulalala

0

Tôi đã thử tất cả những câu trả lời ở trên, chỉ điều này phù hợp với tôi:

cấu hình/môi trường/sản xuất.rb

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

ruby ​​2.1.4p265 (2014/10/27 sửa đổi 48.166) [x86_64-linux] Rails 3.2.22.5

0

Trong Rails 5.1.4, tôi đã thử nghiệm các tình huống sau:

# 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