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?
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.
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:
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
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.
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.
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