2013-03-27 10 views

risposta

17

Da quello che posso capire dalle docs, http_basic_authenticate_with funge da prima del filtro, che accetta un nome e una password, come

http_basic_authenticate_with :name => "dhh", :password => "secret", :except => :index 

Mentre authenticate_or_request_with_http_basic accetta un blocco che consente di inserire un codice per determinare se essi deve essere autenticato (documentation). Per esempio.

before_filter :authenticate 

def authenticate 
    authenticate_or_request_with_http_basic('Administration') do |username, password| 
    ActiveSupport::SecurityUtils.secure_compare(username, "admin") && 
    ActiveSupport::SecurityUtils.secure_compare(password, "password") 
    end 
end 

(Attenzione, questo esempio potrebbe non essere sicuro. Per esempio, attualmente è insicuro perché utilizza secure_compare invece di variable_size_secure_compare. Vedere la source code di http_basic_authenticate_with nel ActionController::HttpAuthentication dalla versione corrente di Rails per una più sicura esempio.)

+0

Per verificare ciò con Capybara, consultare http://stackoverflow.com/a/7938935/664833 – user664833

+1

E ** per eseguire il test a livello di controller **, utilizzare '@ request.env ['HTTP_AUTHORIZATION'] = 'Base' + Base64 :: encode64 ('username: password') 'then' get: your_action'. Rif: http://apidock.com/rails/ActionController/HttpAuthentication/Basic/ControllerMethods/authenticate_or_request_with_http_basic#197-Testing-protected-controllers – user664833

+0

'http_basic_authenticate_with' chiama effettivamente" authenticate_or_request_with_http_basic' internamente. Vedi la [fonte] (https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/http_authentication.rb#L69). – mlovic

Problemi correlati