Подтвердить что ты не робот

Как использовать базовую аутентификацию с httparty в приложении Rails?

Версия командной строки 'httparty' с базовой аутентификацией работает просто и удобно:

httparty -u username:password http://example.com/api/url

Но теперь я ищу способ, которым я могу добавить базовый auth к вызову HTTParty.get из приложения Rails. Прежде всего, для целей тестирования я хочу жестко закодировать учетные данные для входа в контроллер. Просто чтобы убедиться, что это работает. Но я не могу найти никакой документации или примеров, как вы можете их пропустить.

HTTParty.get без учетных данных отлично работает:

@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json")

Но я не вижу, как я могу изменить вариант этого, который принимает часть -u username: password.

Следующая задача для меня (очень новая для Ruby/Rails) заключается в том, чтобы получить учетные данные пользователя из пользовательской формы и передать ее динамически, но для меня сейчас важно, чтобы она работала с жесткой кодировкой.

4b9b3361

Ответ 1

auth = {:username => "test", :password => "test"}
@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json", 
                     :basic_auth => auth)

Ответ 2

Две точки,

  • Если вы нажимаете Twitter api, если я не ошибаюсь, я не думаю, что они больше разрешают базовый auth:( Так что вы можете захотеть посмотреть что-то вроде OmniAuth для входа в OAuth. Для этого вам не нужен HTTParty или форма входа в систему, вы ссылаетесь на вход в Twitter и пользователь вводит учетные данные там, а затем отправляет Twitter запрос обратного вызова к вашему приложению после аутентификации. OmniAuth выполняет большую часть работы за вас, вы просто извлекаете необходимую информацию из того, что она дает вам в маршруте обратного вызова.

  • Но даже в этом случае вам все равно понадобится "потребительский ключ" OAuth и "секрет потребителя", характерный для вашего приложения (как Twitter авторизует ваше приложение, в отличие от пользователя). И вы не хотите, чтобы они, а также никакие ключи auth в вашем исходном коде.

Типичный способ сделать это - привязать их к файлу config/omniauth.yml, который не установлен в исходное управление:

twitter:
  key: CONSUMER_KEY
  secret: CONSUMER_SECRET

И затем загрузите их в инициализаторе config/initializers/omniauth.rb:

consumers = YAML.load("#{Rails.root}/config/omniauth.yml")

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, consumers['twitter']['key'], consumers['twitter']['secret']
end

Вы можете использовать аналогичный подход при загрузке базового имени пользователя/паролей auth, просто привяжите их к некоторому объекту, к которому у вас будет доступ, где бы вы ни совершали вызовы HTTParty.