2010-10-01 11 views

Respuesta

7

Absolutamente. La solución más simple es simplemente poner algo en su controlador de aplicación que use el soporte básico de autenticación de Rails (vea aquí: http://railscasts.com/episodes/82-http-basic-authentication) y simplemente envolverlo en un condicional para su Rails.env. Tenga en cuenta que en Heroku, de forma predeterminada, RAILS_ENV está configurado en producción, pero puede cambiarlo para las aplicaciones que no son de producción utilizando heroku config (http://docs.heroku.com/config-vars).

También podría considerar la instalación de algún middleware Rack de estilo roadblock, pero yo simplemente iría con lo anterior.

+0

Es mejor almacenar el nombre de usuario y la contraseña como variables de configuración de Heroku (http://blog.heroku.com/archives/2009/4/7/config-vars/) y hash (http: //www.zacharyfox. com/blog/ruby-on-rails/password-hashing), aunque la autenticación debería ocurrir solo si Rails.env == 'production' entonces. – avalez

52

una forma más limpia es dejar caer simplemente en un par de líneas de middleware de rejilla en el entorno de ensayo config, dejando la lógica del controlador solo:

# config/environments/staging.rb 
MyApp::Application.configure do 
    config.middleware.insert_after(::Rack::Lock, "::Rack::Auth::Basic", "Staging") do |u, p| 
    [u, p] == ['username', 'password'] 
    end 

    #... other config 
end 

Esta punta de cortesía de Ole Morten Amundsen. Más información, más especificación contraseña Heroku:

http://olemortenamundsen.wordpress.com/2011/04/05/ruby-secure-staging-environment-of-your-public-app-from-users-and-bots/

+0

Esta solución es más limpia y tiene más sentido para mí porque es independiente de la infraestructura. – Juanda

+0

Tenga en cuenta que index.html es servido directamente por el servidor web y no por Rack-Rails y, por lo tanto, la URL index.html no estará protegida. Todo lo demás servido por Rails estará protegido. –

14

En Rails4, lo tengo "No existe el middleware para insertar después: Estante :: Lock" de error. Reemplazar código de Adam para el siguiente:

# config/environments/staging.rb 
MyApp::Application.configure do 
    config.middleware.use '::Rack::Auth::Basic' do |u, p| 
    [u, p] == ['username', 'password'] 
    end 
    # ... 
end 

Ver: http://www.intridea.com/blog/2013/6/4/tips-and-tricks-for-deploying-rails-4-apps-on-heroku

+0

trabajos confirmados en Rails 3.2 –

+1

En Rails 5, middlewares quiere el módulo real, en lugar de una cadena. 'config.middleware.use :: Rack :: Auth :: Basic' – Frexuz

2

Hay una bonita heroku add-on que utiliza Mozilla Persona para la autenticación. Es gratis para los sitios de bajo volumen (menos de 10.000 autenticaciones por mes):

https://addons.heroku.com/wwwhisper

Muy fácil de instalar y configurar.

+0

De acuerdo. El límite de 2 usuarios es el único problema posible. – freemanoid

+0

solo en EE. UU.También Mozilla Persona ha sido descontinuado. '' 'El 30 de noviembre de 2016, Mozilla cerrará los servicios de persona.org. Persona.org y dominios relacionados serán desconectados .''' – Webdevotion

1

Otra manera de hacerlo utilizando el application_controller.rb:

# app/controllers/application_controller.rb 
    before_filter :http_basic_auth 

    def http_basic_auth 
    if ENV['HTTP_AUTH'] =~ %r{(.+)\:(.+)} 
     unless authenticate_with_http_basic { |user, password| user == $1 && password == $2 } 
     request_http_basic_authentication 
     end 
    end 
    end 

y entonces usted necesita para exportar sus valores: para el desarrollo:

export HTTP_AUTH=test:test 

Para heroku:

heroku config:set HTTP_AUTH=test:test 

Ahora, cuando aparezca el mensaje de ventana, debe ingresar para usuario/contraseña => prueba/prueba.

Eso es, espero que lo encuentre útil.

Cuestiones relacionadas