Направляющие: Доступ к имени пользователя/паролю использовал для HTTP Основного Автора?

Я создаю основной API, где информация о пользователе может быть получена после того, как вход в систему и пароль того пользователя правильно отправляются.

Прямо сейчас я использую что-то вроде этого:

http://foo:bar@example.com/api/user.xml

Так, что я должен сделать, доступ пользователь/пароль, отправленный в запросе ( foo и bar) но не уверено, как получить доступ к той информации в контроллере направляющих.

Тогда я проверил бы те переменные через быстрое User.find и затем набор те как переменные имени пользователя и пароля для authenticate_or_request_with_http_basic.

Возможно, что я смотрю на это в абсолютно неправильном пути, но это - то, где я в прямо сейчас.:)

20
задан Shpigford 8 March 2010 в 05:27
поделиться

2 ответа

Ответ на ваш вопрос о том, как получить учетные данные из запроса:

user, pass = ActionController::HttpAuthentication::Basic::user_name_and_password(request)

Однако Authenticate_or_request_with_http_basic - это все, что вам нужно для базовой аутентификации:

class BlahController < ApplicationController
  before_filter :authenticate

  protected

  def authenticate
    authenticate_or_request_with_http_basic do |username, password|
      # you probably want to guard against a wrong username, and encrypt the
      # password but this is the idea.
      User.find_by_name(username).password == password
    end
  end
end

Authenticate_or_request_with_http_basic вернет статус 401, если учетные данные не предоставлены, что откроет диалоговое окно имени пользователя / пароля в браузере. Если указаны подробности, они передаются в указанный блок. Если блок возвращает истину, запрос проходит. В противном случае обработка запроса прерывается, и клиенту возвращается статус 403.

Вы также можете проверить Railscast 82 (это был приведенный выше код): http://railscasts.com/episodes/82-http-basic-authentication

50
ответ дан 29 November 2019 в 23:14
поделиться

Плагин rails Authlogic поддерживает эту функциональность (а также многое другое) из коробки. Вы можете поискать его в исходниках или просто интегрировать его в существующее приложение.

Edit:
Покопавшись в исходниках Authlogic, я нашел этот файл, который использует следующую часть кода для получения имени пользователя и пароля:

  def authenticate_with_http_basic(&block)
    @auth = Rack::Auth::Basic::Request.new(controller.request.env)
    if @auth.provided? and @auth.basic?
      block.call(*@auth.credentials)
    else
      false
    end
  end

Я бы посмотрел немного дальше, куда это все ведет, но мне пора спать. Надеюсь, я был полезен.

1
ответ дан 29 November 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: