¿Hay alguna forma de configurar la autenticación http simple para una aplicación en heroku?


Quiero configurar un servidor privado en heroku usando autenticación http simple. Es eso posible?

Author: John Bachir, 2010-10-01

6 answers

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 integrado de Rails (vea aquí: http://railscasts.com/episodes/82-http-basic-authentication ) y simplemente envuélvalo en un condicional para su Rails.env. Tenga en cuenta que en Heroku, de forma predeterminada, RAILS_ENV se establece en producción, pero puede cambiar esto para sus aplicaciones que no son de producción utilizando heroku config (http://docs.heroku.com/config-vars).

También podría considerar instalando algún middleware de rack estilo roadblock, pero solo iría con lo anterior.

 7
Author: tfe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-01 17:33:40

Una forma más limpia es simplemente colocar un par de líneas de middleware de rack en la configuración de su entorno de ensayo, dejando la lógica del controlador sola:

# 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

Este consejo es cortesía de Ole Morten Amundsen. Más información más Heroku contraseña especificación:

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

 52
Author: Adam Florin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-14 20:42:49

En Rails4, obtuve el error "No such middleware to insert after: Rack::Lock". Sustitúyase el código de Adán por 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

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

 14
Author: Nobu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-09 20:17:50

Hay un buen complemento de heroku que usa Mozilla Persona para la autenticación. Es gratis para sitios de bajo volumen (menos de 10,000 autenticaciones por mes):

Https://addons.heroku.com/wwwhisper

Muy fácil de instalar y configurar.

 2
Author: Dave Cadwallader,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-22 16:35:29

Otra forma de hacerlo usando 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 luego necesita exportar sus valores: para el desarrollo:

 export HTTP_AUTH=test:test

Para heroku:

 heroku config:set HTTP_AUTH=test:test

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

Eso es todo espero que lo encuentres útil.

 1
Author: heriberto perez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-22 16:42:58

Respuesta actualizada para Rails 5:

config.middleware.use(Rack::Auth::Basic) do |u, p|
  [u, p] == ["user", "password"]
end

Además, se ha señalado en la entrada del blog de Ole el uso de ENV vars. Me gustaría añadir que la opción predeterminada para una contraseña aleatoria es una buena idea en caso de que el var env no esté establecido:

config.middleware.use(Rack::Auth::Basic) do |u, p|
  [u, p] == [ENV['USER'], ENV['PASSWORD'] || SecureRandom.hex]
end
 0
Author: thisismydesign,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-19 23:35:45