Est-il un moyen simple d'authentification http pour une application sur heroku?

je veux configurer un serveur de staging privé sur heroku en utilisant une authentification http simple. Est-ce possible?

25
demandé sur John Bachir 2010-10-01 16:36:15

6 réponses

absolument. La solution la plus simple est de simplement mettre quelque chose dans votre controller d'application qui utilise le support d'auth de base construit par les Rails (voir ici: http://railscasts.com/episodes/82-http-basic-authentication ) et il suffit de l'envelopper dans un conditionnel pour votre Rails.env . Notez que sur Heroku, par défaut le RAILS_ENV est mis en production, mais vous pouvez le modifier pour vos applications non-production en utilisant heroku config ( http://docs.heroku.com/config-vars ).

vous pouvez également envisager l'installation d'un middleware de style Roadblock, mais je dirais juste ce qui précède.

7
répondu tfe 2010-10-01 17:33:40

une façon plus propre est de simplement déposer quelques lignes d'middleware Rack dans votre configuration d'environnement de mise en scène, en laissant la logique du contrôleur seule:

# 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

cette pointe est une gracieuseté d'Ole Morten Amundsen. En savoir plus plus Heroku mot de passe spécification:

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

52
répondu Adam Florin 2011-06-14 20:42:49

sur Rails4, Je n'ai pas de middleware à insérer après: Rack::Lock erreur. Remplacer le code D'Adam par le suivant:

# config/environments/staging.rb
MyApp::Application.configure do
  config.middleware.use '::Rack::Auth::Basic' do |u, p|
    [u, p] == ['username', 'password']
  end
  # ...
end

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

14
répondu Nobu 2015-02-09 20:17:50

il y a un bel add-on heroku qui utilise Mozilla Persona pour l'authentification. Il est gratuit pour les sites de faible volume (moins de 10.000 authentifications par mois):

https://addons.heroku.com/wwwhisper

très facile à installer et configurer.

2
répondu Dave Cadwallader 2014-01-22 16:35:29

une autre façon de le faire en utilisant le 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 ==  && password ==  }
        request_http_basic_authentication
      end
    end
  end

et ensuite vous devez exporter vos valeurs: pour le développement:

 export HTTP_AUTH=test:test

pour heroku:

 heroku config:set HTTP_AUTH=test:test

maintenant quand l'invite de fenêtre vous devriez entrer pour l'utilisateur / password => test / test.

j'espère que vous le trouverez utile.

1
répondu heriberto perez 2015-12-22 16:42:58

réponse mise à jour pour Rails 5:

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

en outre, il a été souligné dans Ole's blog post d'utiliser ENV vars. J'ajouterais que la défaillance à un mot de passe aléatoire est une bonne idée dans le cas où le var env n'est pas défini:

config.middleware.use(Rack::Auth::Basic) do |u, p|
  [u, p] == [ENV['USER'], ENV['PASSWORD'] || SecureRandom.hex]
end
0
répondu thisismydesign 2018-07-19 23:35:45