2012-02-28 19 views
9

Rails 3.1+ Quiero que mis helpers usen el protocolo https sin tener que especificarlo en cada helper que llamo. Después de buscar en todo lo que he encontrado diversas maneras, pero ninguno trabaja, por ejemplo:Cambiar el protocolo a https en todos los auxiliares de rieles

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

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

¿Cómo puede hacerse esto?

Respuesta

0

Sea cual sea el entorno en el que desea utilizar SSL (https: //), sólo tiene que añadir estas líneas de configuración a su archivo de configuración en 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

Eso causará una redirección cuando el protocolo de solicitud sea http, pero me gustaría https en los ayudantes de URL, principalmente para los enlaces en los correos electrónicos. – 99miles

1

Si desea forzar SSL en su aplicación, esto puede ser hecho configurando config.force_ssl como verdadero en su application.rb (o su archivo específico del entorno). Más sobre el tema here

EDITAR Ok, así que no encuentran suficiente evidencia para esto, pero creo que se puede reemplazar en default_url_options=(options={}) controlador de aplicación, y establecer :protocol => :https en el cuerpo de la función. Si esto no es el truco para sus correos electrónicos, tendrá que repetir el procedimiento en la configuración de su entorno agregando config.action_mailer.default_url_options. Espero que esto lo haga!

+1

Eso causará una redirección cuando el protocolo de solicitud sea http, pero me gustaría https en los ayudantes de URL, principalmente para los enlaces en los correos electrónicos. – 99miles

0

En Rails 3.2.1, por defecto force_ssl es cierto, vamos a ver

  1. abierto config/ambientes/production.rb y búsqueda "config.force_ssl"

config.force_ssl = true - no es necesario cambiar

ahora en config/environments/development.rb - no es necesario colocar config.force_ssl, debería funcionar, porque su servidor se ejecuta localmente.

autorización, aquí es el otro punto de vista

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

Añadir definición de la base de ayudante en la anterior si lo demás y en el ActionView::Helpers, hay un método url_for que podría conseguir lo que quiere si comienza a usar esa .

+1

Eso causará una redirección cuando el protocolo de solicitud sea http, pero me gustaría https en los ayudantes de URL, principalmente para los enlaces en los correos electrónicos. – 99miles

+0

@ 99miles - He alterado la respuesta. Por favor, verifique, hágame saber si esto funciona para usted. –

12

¿Así que lo quiere principalmente para los enlaces en los correos electrónicos?

Creo que esto funcionará en su production.rb, development.rb o en cualquier otro entorno.

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

Si está utilizando los carriles 4, definiendo ApplicationController#default_url_options no funciona.las opciones de URL ahora se definen en las rutas de configuración de la aplicación:

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

Puse lo siguiente en mi archivo production.rb. 'Rails.application.routes.default_url_options [: protocol] = 'https'' – gitb

+0

Funciona solo bajo la consola para Rails 5.1.4. – lulalala

0

Probé todas las respuestas anteriores, sólo se esto funciona para mí:

config/environments/production.rb

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

rubí 2.1.4p265 (27/10/2014 revisión 48166) [x86_64-linux] Rails 3.2.22.5

0

En Rails 5.1.4, he probado los siguientes escenarios:

# 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 
Cuestiones relacionadas