Ho un'applicazione Rails ospitata nella intranet aziendale, accessibile in una directory 'rails_app_dir' (uno 'scope' dal punto di vista delle regole di Routing): https://intranet.azienda/ <-- la home della intranet https://intranet.azienda/rails_app_dir <-- la mia applicazione Rails Il livello SSL viene gestito a livello aziendale da un reverse proxy, qundi le richieste che arrivano sia al web server (Nginx) che alla mia app Rails sono già in http. Il problema è che tutte le redirect_to (es. redirect_to book) vengono passate (costruite) in http, generando un errore. Forzando mediante: config.force_ssl = true non risolve il problema perché comunque a Rails, anche dopo un redirezionamento la richiesta arriva ancora in http, e questo genera un loop di redirezionamenti... Qualche idea? Grazie mille, Vi auguro una magnifica giornata, iwan
on 2012-11-15 14:00
on 2012-11-15 14:23
Il giorno 15/nov/2012, alle ore 14:00, Iwan B. <iwan.buetti@mac.com> ha scritto: > Forzando mediante: > config.force_ssl = true > > non risolve il problema perch comunque a Rails, anche dopo un > redirezionamento la richiesta arriva ancora in http, e questo genera un > loop di redirezionamenti... > > Qualche idea? la prima che mi viene in mente di non usare i *path helpers* tipo users_path, bens users_url. in questo modo le url generate dovrebbero contenere il prefisso https :-) ciao, A. -- http://andreapavoni.com
on 2012-11-15 14:36
Quindi devi generare le URL in modo che usino HTTPS in uscita, ma devi accettare HTTP in entrata. Ho capito bene? Forse un problema che risolvi facendoti un middleware ad-hoc. E' anche facile da fare secondo me. Tieni `config.force_ssl = false` e quando la URL esce gli cambi lo scheme ad https:// -f
on 2012-11-15 15:05
On 15/nov/2012, at 14:35, Fabrizio Regini wrote: > Quindi devi generare le URL in modo che usino HTTPS in uscita, ma devi accettare HTTP in entrata. Ho capito bene? > Esatto > Forse un problema che risolvi facendoti un middleware ad-hoc. E' anche facile da fare secondo me. > Tieni `config.force_ssl = false` e quando la URL esce gli cambi lo scheme ad https:// > Mmmmh... e come?
on 2012-11-15 15:45
Effettivamente non proprio banale, neanche trascendentale. Il tuo problema sono URL dei redirect, visto che i path helpers stampano un path quindi lo schema da usare in quel caso viene interpretato dal browser. Per i redirect, visto che si tratta di un header, puoi usare una cosa del genere: https://github.com/rack/rack/blob/master/lib/rack/head.rb con @app.call(env) passi la chiamata in basso nello stack, ispezioni gli header e se si tratta di un redirect cambi lo schema. -f
on 2012-11-15 16:01
per il redirect_to basta: :protocol => 'https' magari ti fai un helper method tipo: redirect_to_ssl ed usi solamente quello, oppure puoi fare l'overriding di redirect_to. Non credo che ci sia bisogno di config.force_ssl = false
on 2012-11-15 18:07
Riprendendo quanto dicono i ragazzi credo che la soluzione possa essere
suddivisa in due parti.
Primo. Utilizza gli _url helpers invece di _path helpers
resource_path(resource) # wrong
resource_url(resource) # correct
Secondo. Setta https come protocollo predefinito nella generazione degli
url.
def default_url_options(options={})
{ :secure => true }
end
Facci sapere.
On Thu, Nov 15, 2012 at 4:01 PM, Riccardo Tacconi
<rtacconi@gmail.com>wrote:
>
> config.force_ssl = false
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>
--
Andrea Reginato
Lelylan | reThink your house
http://lelylan.com
on 2012-11-15 18:08
Dimenticavo, default_url_options pu stare dentro la classe ApplicationController. 2012/11/15 Andrea Reginato <andrea.reginato@gmail.com> > >> >> > -- > Andrea Reginato > Lelylan | reThink your house > http://lelylan.com > > -- Andrea Reginato Lelylan | reThink your house http://lelylan.com
on 2012-11-15 20:48
Giusto, soluzione migliore. Dovrebbe funzionare. Il giorno 15/nov/2012 18:06, "Andrea Reginato" <andrea.reginato@gmail.com> ha scritto:
on 2012-11-15 21:42
Uso frequentemente utilizzare rails dietro ad un proxy https non mi ricordo di aver avuto molti problemi...... Come reverse proxy uso lighttpd ma non penso sia differente. Per i link utilizzo _path in maniera che l'indirizzo sia riferito all'url a cui e` connesso l'utente (indipendentemente che sia http o https) nel caso mi sia indispensabile utilizzare un url aggiungo :protocol => 'https' al link http://api.rubyonrails.org/classes/ActionView/Help... A parte questo non mi ricordo altre difficolta. Andrea
on 2012-12-17 11:41
Ho risolto mettendo:
def default_url_options(options={})
{ :protocol => (Rails.env=="production" ? "https://" : "http://") }
end
in application_controller.rb
Direttiva che purtroppo viene ignorata dalla gemma cancan...
Il tutto risolto aggiungendo, nel medesimo file, la seguente:
rescue_from CanCan::AccessDenied do |exception|
redirect_to access_denied_path(:protocol => (Rails.env=="production"
? "https://" : "http://"))
end
Grazie mille per l'aiuto.
Buone feste!
iwan
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.