2012-02-28 9 views
9

Rails 3.1+ Chcę, aby moi pomocnicy url korzystali z protokołu https bez konieczności podawania go każdemu pomocnikowi, do którego dzwonię. Po przeszukaniu całego Znalazłem różne sposoby, ale pracy brak, na przykład:Zmiana protokołu na https we wszystkich pomocnikach szyn

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

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

Jak można to zrobić?

Odpowiedz

0

Niezależnie środowisko chcesz korzystać z SSL (https: //), wystarczy dodać to config linie do swojego pliku konfiguracyjnego w 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

To spowoduje przekierowanie, gdy protokół żądania będzie http, ale chciałbym https w pomocników adresów URL, głównie dla linków w wiadomościach e-mail. – 99miles

1

Jeśli chcesz zmusić SSL od aplikacji, może to być zrobione przez ustawienie config.force_ssl na true w twoim application.rb (lub pliku specyficznym dla twojego środowiska). Więcej na ten temat here

EDIT Ok, więc nie znaleźć wystarczająco dużo dowodów na to, ale myślę, że można zastąpić default_url_options=(options={}) w kontrolerze aplikacji i ustaw :protocol => :https w ciele funkcji. Jeśli to nie wystarczy, aby wysłać e-maile, musisz powtórzyć procedurę w konfiguracji środowiska, dodając config.action_mailer.default_url_options. Mam nadzieję, że to robi!

+1

To spowoduje przekierowanie, gdy protokół żądania jest http, ale chciałbym https w pomocników adresów URL, głównie dla linków w wiadomościach e-mail. – 99miles

0

W Rails 3.2.1, domyślnie force_ssl jest prawdą, sprawdźmy

  1. Otwórz config/Środowiska/production.rb i szukać "config.force_ssl"

config.force_ssl = true - nie ma potrzeby zmiany

teraz w config/Środowiska/development.rb - nie ma potrzeby umieszczania config.force_ssl, to powinno działać, ponieważ serwer działa lokalnie.

Ok, tutaj jest inny widok

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

Dodaj def w bazie pomocnika na powyższy jeśli inny iw ActionView::Helpers, jest url_for sposób, że może dostać to, co chcesz, jeśli zaczniesz używać że .

+1

To spowoduje przekierowanie, gdy protokół żądania będzie http, ale chciałbym https w pomocników url, głównie dla linków w e-mailach. – 99miles

+0

@ 99miles - Zmieniłem odpowiedź, proszę sprawdzić, daj mi znać, czy to działa dla Ciebie. –

12

Chcesz go głównie do linków w e-mailach?

Myślę, że to będzie działać w twoim production.rb, development.rb lub innym środowisku.

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

Jeśli używasz Rails 4, określające ApplicationController#default_url_options nie działa.Opcje URL są obecnie określone w aplikacji dróg config:

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

Umieściłem następujący plik w moim pliku production.rb. 'Rails.application.routes.default_url_options [: protocol] = 'https'' – gitb

+0

Działa tylko pod konsolą dla Rails 5.1.4. – lulalala

0

próbowałem wszystkie odpowiedzi powyżej, tylko działa to dla mnie:

config/environments/production.rb

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

rubin 2.1.4p265 (27.10.2014 wersja 48166) [x86_64-Linux] Szyny 3.2.22.5

0

w szynach 5.1.4, I testowano następujące scenariusze:

# 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 
Powiązane problemy