2011-07-14 11 views
22

Opracowuję witrynę, która bardzo często łączy http i https - jaki jest najlepszy/najłatwiejszy sposób, aby linki używały właściwego protokołu dla trasy - czy można go określić na trasach plik?Uzyskiwanie pomocników URL-i dla Railsów do automatycznego generowania adresów URL https

że mam następującą trasę w Rails 3.

match "/test" => "test#index", :as => :test, :constraints => { :protocol => 'https' }

Jeśli jestem na stronie http i używam test_url(), to będzie wyjście http://domain.com/test. Zamiast tego chcę uzyskać https://domain.com/test.

Wiem, że mogę używać test_url(:secure => true), ale to jest powielanie logiki.

Wiem, że mogę mieć http://domain.com/test do https://domain.com/test, ale to dodatkowe przekierowanie, a także nie udaje się w postach formularza.

Pomysły?

+2

myślę, że można znaleźć rozwiązanie z następującym pytaniem, http://stackoverflow.com/questions/3993651/ – nkm

+0

Nie wiem, dlaczego to jest tak trudny w Railsach. Z pewnością większość witryn korzysta z HTTPS do logowania itp.? –

Odpowiedz

17

nie próbowałem ale dodać to na swój ApplicationController:

def default_url_options(options={}) 
{ :secure => true } 
end 
+0

To jest strona, która miesza http i https wiele, myślę, że to sprawiłoby, że wszystkie adresy URL byłyby https (prawda?) –

+0

tak, masz rację, więc powinieneś tylko umieścić to w kontrolerach mających https – apneadiving

+1

Nadal nie wiesz jak to mi pomaga. Jeśli jestem na stronie http, chcę, aby funkcja test_url() zwróciła adres URL https, a nie http. –

-1

Można użyć wtyczki nazywa ss_requirement, że dostarczy Ci metod jak ssl_required ssl_allowed

można po prostu dodać ten w kontrolerze włączyć ot wyłączyć https na jakiekolwiek działanie

ssl_allowed :login, :update_profile 

https://github.com/rails/ssl_requirement

+0

To nie ma nic wspólnego z generowaniem adresów URL. –

+0

W takim przypadku generujesz swoje adresy URL w normalny sposób, ale jest on przesyłany jako protokół SSL w przypadku metod, o których wspomniałeś: – Ross

+1

Nie, nie jest. To przekieruje http post z http na https, tracąc dane pocztowe. –

20

Użyj adresu test_url (:: protocol => 'https') dla adresów URL https.

+3

"Wiem, że mogę użyć test_url (: secure => true), ale to jest powielanie logiki." –

1

Dla Rails 3.2 Użyłem kombinacji odpowiedzi @ apneadiving. Dodając poniższy kod do mojego ApplicationController

def default_url_options(options={}) 
    options.merge{ :protocol => "https" } 
end 
4
def default_url_options(options={}) 
{ :protocol => "https" } 
end 
+2

Chociaż ten kod może pomóc w rozwiązaniu problemu, nie wyjaśnia, dlaczego _why_ i/lub _how_ odpowiada na to pytanie.Dostawienie tego dodatkowego kontekstu znacznie poprawiłoby jego wartość długoterminową. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienie, w tym, jakie ograniczenia i założenia mają zastosowanie. –

Powiązane problemy