ruby - cli - ¿Hay alguna forma de configurar la autenticación HTTP simple para una aplicación en heroku?
heroku ssh (6)
Quiero configurar un servidor de ensayo privado en heroku usando autenticación HTTP simple. ¿Es eso posible?
En Rails4, recibí el error "No hay middleware para insertar después de: Rack :: Lock". Reemplace el código de Adam 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
Ver: http://www.intridea.com/blog/2013/6/4/tips-and-tricks-for-deploying-rails-4-apps-on-heroku
Hay un buen complemento 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.
Otra forma 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 luego necesita 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 la ventana, debe ingresar para usuario / contraseña => prueba / prueba.
Eso es, espero que lo encuentres útil.
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 publicación de blog de Ole para utilizar ENV vars. Agregaría que una contraseña aleatoria es una buena idea en caso de que el env var no esté configurado:
config.middleware.use(Rack::Auth::Basic) do |u, p|
[u, p] == [ENV[''USER''], ENV[''PASSWORD''] || SecureRandom.hex]
end
Una manera más limpia es simplemente colocar un par de líneas de middleware Rack en la configuración del entorno de ensayo, dejando solo la lógica del controlador:
# 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 especificación de contraseña Heroku:
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 incorporado de Rails (vea aquí: http://railscasts.com/episodes/82-http-basic-authentication ) y simplemente envolverlo en un condicional para tus Rails.env
. Tenga en cuenta que en Heroku, de forma predeterminada, RAILS_ENV está configurado para producción, pero puede cambiarlo para sus aplicaciones que no sean de producción utilizando heroku config
( http://docs.heroku.com/config-vars ).
También podría considerar instalar algún middleware Rack de estilo roadblock, pero simplemente seguiría con lo anterior.