2010-10-01 19 views

Odpowiedz

7

Absolutnie. Najprostszym rozwiązaniem jest po prostu wstawienie czegoś do kontrolera aplikacji, który używa wbudowanej w Rails podstawowej obsługi uwierzytelniania (zobacz tutaj: http://railscasts.com/episodes/82-http-basic-authentication) i po prostu zapakuj ją w tryb warunkowy dla twojego Rails.env. Zauważ, że na Heroku, domyślnie RAILS_ENV jest ustawiony na produkcję, ale możesz to zmienić dla swoich nieprodukcyjnych aplikacji przy użyciu heroku config (http://docs.heroku.com/config-vars).

Można również rozważyć zainstalowanie oprogramowania pośredniego typu Rack w stylu blokowania drogi, ale wystarczy, że wykonam powyższe czynności.

+0

Lepiej przechowywać nazwę użytkownika i hasło jako zmienne konfiguracyjne Heroku (http://blog.heroku.com/archives/2009/4/7/config-vars/) i hashe (http: //www.zacharyfox. com/blog/ruby-on-rails/hash-hashing), chociaż uwierzytelnianie powinno wystąpić tylko wtedy, gdy Rails.env == 'production' then. – avalez

52

Czystsze sposobem jest po prostu wpaść na kilka linii zasilającej middleware do swojej konfiguracji środowiska staging, pozostawiając sam Logic Controller:

# 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 

Ta wskazówka uprzejmości Ole Morten Amundsena. Więcej informacji oraz specyfikacji hasłem Heroku:

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

+0

To rozwiązanie jest czystsze i ma dla mnie więcej sensu, ponieważ jest agnostyczne. – Juanda

+0

Należy pamiętać, że plik index.html jest obsługiwany bezpośrednio przez serwer WWW, a nie przez Rack-Rails, dlatego adres URL index.html nie będzie chroniony. Wszystkie pozostałe serwery Rails będą chronione. –

14

Na Rails4, mam "Nie ma takiego middleware do wstawienia po: Rack :: Lock" błąd. Wymień kod Adama do poniżej:

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

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

+0

potwierdzone prace na Railsach 3.2 –

+1

W Railsach 5, middleware chce rzeczywistego modułu, a nie ciąg. 'config.middleware.use :: Rack :: Auth :: Basic' – Frexuz

2

Jest miły Heroku dodatek, który używa Mozilla Persona do uwierzytelniania. Jest bezpłatny dla stron o niskiej głośności (poniżej 10.000 uwierzytelnień miesięcznie):

https://addons.heroku.com/wwwhisper

Bardzo łatwy w instalacji i konfiguracji.

+0

Uzgodnione. Limit 2 użytkowników jest jedynym możliwym problemem. – freemanoid

+0

Tylko USA.Również Mozilla Persona została wycofana. '' '30 listopada 2016 r. Mozilla zamknie usługi persona.org. Persona.org i powiązane domeny zostaną podjęte w trybie offline "" – Webdevotion

1

Innym sposobem, aby to zrobić za pomocą 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 == $1 && password == $2 } 
     request_http_basic_authentication 
     end 
    end 
    end 

a następnie trzeba wyeksportować wartości: dla rozwoju:

export HTTP_AUTH=test:test 

Dla Heroku:

heroku config:set HTTP_AUTH=test:test 

Teraz, gdy okno dialogowe należy wprowadzić dla użytkownika/hasło => test/test.

To jest nadzieja, że ​​okaże się przydatna.

Powiązane problemy