2010-10-01 2 views

Antwort

7

Absolut. Die einfachste Lösung besteht darin, einfach etwas in Ihren Anwendungs-Controller zu legen, der die in Rails integrierte Basis-Auth-Unterstützung verwendet (siehe hier: http://railscasts.com/episodes/82-http-basic-authentication) und ihn einfach in eine Bedingung für Ihre Rails.env einbinden. Beachten Sie, dass bei HEROKU RAILS_ENV standardmäßig auf Produktion eingestellt ist. Sie können dies jedoch für Ihre nicht produktiven Apps ändern, indem Sie heroku config (http://docs.heroku.com/config-vars) verwenden.

Sie könnten auch eine Rackblock-Middleware im Roadblock-Stil installieren, aber ich würde nur mit dem oben genannten gehen.

+0

Es ist besser, Benutzername und Passwort als Heroku Konfigurationsvariablen zu speichern (http://blog.heroku.com/archives/2009/4/7/config-vars/) und Hashed (http: //www.zacharyfox. com/blog/ruby-on-rails/password-hashing), obwohl Authentifizierung nur dann erfolgen sollte, wenn Rails.env == 'production'. – avalez

52

Ein sauberere Weg ist, einfach in ein paar Zeilen von Rack-Middleware-Drop in der Staging-Umgebung config Controller-Logik allein lassend:

# 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 

Dieser Tipp mit freundlicher Genehmigung von Ole Morten Amundsen. Mehr Infos und Heroku Passwort Spezifikation:

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

+0

Diese Lösung ist sauberer und macht für mich mehr Sinn, weil sie infrastrukturlos ist. – Juanda

+0

Bitte beachten Sie, dass index.html direkt vom Webserver und nicht von Rack-Rails bereitgestellt wird und somit die index.html-URL nicht geschützt ist. Alles andere, das von Rails bedient wird, wird geschützt. –

14

Auf Rails4, ich habe "keine solche Middleware einzufügen nach: Rack :: Lock" Fehler. Ersetzen Adams Code an die unten:

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

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

+0

bestätigt funktioniert auf Rails 3.2 –

+1

In Rails 5, Middlewares will das eigentliche Modul, anstatt eine Zeichenfolge. 'config.middleware.use :: Rack :: Auth :: Basic' – Frexuz

2

Es gibt einen schönen Heroku Add-on, verwendet Mozilla Persona für die Authentifizierung. Es ist kostenlos für Low-Volume-Websites (unter 10.000 Authentifizierungen pro Monat):

https://addons.heroku.com/wwwhisper

Sehr einfach zu installieren und zu konfigurieren.

+0

Einverstanden. 2 Benutzer begrenzen ist das einzige mögliche Problem. – freemanoid

+0

nur für uns.Auch Mozilla Persona wurde eingestellt. '' 'Am 30. November 2016 wird Mozilla die Dienste von persona.org herunterfahren. Persona.org und verwandte Domains werden offline genommen. '' ' – Webdevotion

1

Ein anderer Weg, um es mit dem application_controller.rb zu tun:

# 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 == $1 && password == $2 } 
     request_http_basic_authentication 
     end 
    end 
    end 

und dann müssen Sie Ihre Werte exportieren: für die Entwicklung:

export HTTP_AUTH=test:test 

Für Heroku:

heroku config:set HTTP_AUTH=test:test 

Jetzt, wenn das Fenster aufgefordert wird, sollten Sie für Benutzer/Passwort eingeben => Test/Test.

Das ist es hoffe, dass Sie es nützlich finden.

Verwandte Themen