2011-01-28 52 views
21

¿Hay alguna manera de que pueda mantener mi aplicación completamente privada y solo dejar que los desarrolladores tengan acceso?¿Cómo puedo mantener mi aplicación Heroku privada?

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

+1

Si alguien vino aquí desde Google en busca de node.js, aquí hay un [enlace] (http://blog.modulus.io/nodejs-and-express-basic-authentication) – funroll

Respuesta

16

Mi solución económica 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 a lo largo de otras capas de autenticación - Devise u otros.

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

before_filter :authenticate 

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

Siempre que otros compañeros aterrizan en yourdomain.heroku.com, se les pide para la autenticación HTTP, más tarde para otro tipo de autenticación si en su lugar.

+0

Es mejor guardar 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://zacharyfox.com/blog/ruby-on-rails/password-hashing) , aunque la autenticación debería ocurrir solo si Rails.env == 'producción' entonces. – avalez

+0

¿Puedo usar esto en una aplicación AngularJS (generador angular lleno)? Si es así, ¿dónde realmente agrego este código para que sea enviado a Heroku? – LifeOnLars

+0

Rails 4 tiene lo anterior incorporado: http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html –

0

Echa un vistazo a la gema de autllogic, en particular la característica Token de acceso único.

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

2

Una solución realmente simple sería simplemente agregar una clave que pueda almacenarse en una cookie en la máquina de los usuarios. Esta no es una solución perfecta, ya que alguien podría obtener la clave, pero le brinda protección básica de que alguien tropiece con su sitio. Puede usar una url como http://www.yourdomain.com?access_key=random_string y luego agregar lo siguiente a su controlador de aplicación.

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 comprobará la clave de acceso, ya sea en la dirección URL o una cookie en la máquina de los usuarios y hacerles en si existe en cualquier lugar. De esta forma, una vez que acceden al sitio con la clave, pueden acceder a la url directamente.

+0

¡Gracias! esto fue simplemente bueno y simple, lo apliqué a una aplicación sailsjs (nodo) y funcionó maravillosamente. –

4

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

+0

solo disponible en la región de EE. UU. Aunque ... – Imanol

0

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

0

Mi solución (también barato) (Django aplicación que utiliza puntos de vista basados ​​en la clase) es utilizar SuperUserRequiredMixin en todos mis puntos de vista basados ​​clase como esta:

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

añadir/eliminar este mixin es mi manera de hacer las esta.

Cuestiones relacionadas