¿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.
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.
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).
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:
No puedo encontrar mucha documentación en heroku_user
así que no se si todavía está apoyar.
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.
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.
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.
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.
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