Я немного застрял, пытаясь быстро запустить и запустить HTTP Digest-аутентификацию, во многом как в руководстве:
HTTP Digest Authentication"> Руководства по Ruby on Rails: обзор контроллера действий> Аутентификация дайджеста HTTP
class ApplicationController < ActionController::Base
protect_from_forgery
USERS = { "sam" => "ruby" }
before_filter :authenticate
private
def authenticate
authenticate_or_request_with_http_digest do |username|
USERS[username]
end
end
end
У меня запрашивают имя пользователя и пароль, хотя при вводе вышеизложенного аутентификация кажется неудачной, и мне снова предлагают. Поэтому я начал копаться в коде, который подтверждает запрос здесь:
validate_digest_response"> GitHub: http_authentication.rb> validate_digest_response
def validate_digest_response(request, realm, &password_procedure)
secret_key = secret_token(request)
credentials = decode_credentials_header(request)
valid_nonce = validate_nonce(secret_key, request, credentials[:nonce])
if valid_nonce && realm == credentials[:realm] && opaque(secret_key) == credentials[:opaque]
password = password_procedure.call(credentials[:username])
return false unless password
method = request.env['rack.methodoverride.original_method'] || request.env['REQUEST_METHOD']
uri = credentials[:uri][0,1] == '/' ? request.fullpath : request.url
[true, false].any? do |password_is_ha1|
expected = expected_response(method, uri, credentials, password, password_is_ha1)
expected == credentials[:response]
end
end
end
Я не вижу, как он обрабатывает пароль как обычный текст. Как устанавливается password_is_ha1 ? Я также немного озадачен тем, как работает блок any? , который может не помочь: - /
Так же, как быстрое примечание: я знаю, что на самом деле я не должен хранить пароли в виде простого текста и в исходном коде, как это. Я просто пытаюсь создать понимание и реорганизую это позже.
Огромное спасибо за всю вашу помощь заранее: -D