¿Cómo puedo mantener mi aplicación Heroku privada?


¿Hay alguna manera de que pueda mantener mi aplicación completamente privada, y solo permitir que los desarrolladores tengan acceso?

Cuando un usuario aleatorio ingresa la URL, debería ser algo así como una página en blanco, pero cuando los desarrolladores ingresan la URL, deberían poder acceder a la aplicación.

Author: alexwlchan, 2011-01-28

7 answers

Mi solución barata ha estado implementando un before_filter para solicitar una autenticación HTTP antes de que se ejecute cada acción.

Esta solución funciona bien junto con otras capas de autenticación – Devise u otras.

USERS = { "user" => "secret" }

before_filter :authenticate

def authenticate
  authenticate_or_request_with_http_digest("Application") do |name|
    USERS[name]
  end
end

Cuando otros pares aterrizan en yourdomain.heroku.com, se les pide autenticación HTTP, más tarde para otra autenticación si está en su lugar.

 16
Author: lbz,
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-01-28 21:43:37

Ahora también puede usar un Heroku add-on que le permite especificar correos electrónicos de los usuarios a los que se les permite acceder a una aplicación y que utiliza Persona (también conocido como BrowserID) para autenticar usuarios (no se necesita una contraseña específica del sitio).

 4
Author: Jan Wrobel,
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
2013-04-16 08:55:59

Puede usar la autenticación básica HTTP como una forma fácil:

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

No es exactamente a prueba de balas, pero tal vez suficiente.

También puede intentar comprobar heroku_user y denegar el acceso si no está configurado:

Http://blog.heroku.com/archives/2008/1/14/heroku_user /

No puedo encontrar mucha documentación en heroku_user así que no se si todavía está apoyar.

 2
Author: mu is too short,
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
2017-05-23 12:17:19

Una solución realmente simple sería simplemente agregar una clave que se pueda almacenar en una cookie en la máquina del usuario. Esta no es una solución perfecta, ya que alguien podría obtener la clave, pero le brinda protección básica contra alguien que tropieza con su sitio. Puedes usar una url como http://www.yourdomain.com?access_key=random_string y luego agregue lo siguiente a su controlador de aplicaciones.

class ApplicationController < ActionController::Base
  before_filter :check_redirect_key

  def check_redirect_key
    if request[:access_key] != 'random_string' && cookies[:access_key] != 'random_string'
      redirect_to "/404.html" 
    elsif request[:access_key] == 'random_string'
      cookies.permanent[:access_key] = 'random_string'
    end
  end

end

Este código buscará la clave de acceso en la url o una cookie en los usuarios máquina y dejarlos entrar si existe en cualquier lugar. De esa manera, una vez que han accedido al sitio con la clave, pueden acceder a la url directamente.

 2
Author: Braden Becker,
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-01-29 23:21:06

Echa un vistazo a la gema authlogic, particularmente la característica de Token de Acceso Único.

Puede devolver un 404 a cualquiera que no pase el token de acceso único apropiado como argumento.

 0
Author: Steve Wilhelm,
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-01-29 09:37:07

Construí la gema rack_staging para manejar este caso de uso por mí mismo, podría ser útil para usted también.

 0
Author: Glenn Gillen,
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
2013-07-03 23:10:08

Mi solución (también barata) (aplicación Django que usa vistas basadas en clases) es usar SuperUserRequiredMixin en todas mis vistas basadas en clases como esta:

class BlogPostDetailView(SuperuserRequiredMixin, DetailView):
    template_name = "blogpost-detail.html"
    model = BlogPost

Agregar / eliminar este mixin es mi manera de hacerlo.

 0
Author: pkaramol,
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
2016-07-24 10:36:58