Як використовувати базову автентифікацію за допомогою httparty у програмі Rails?


76

Версія командного рядка "httparty" з базовою автентифікацією працює просто і чудово:

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

Але зараз я шукаю спосіб, яким я можу додати базовий аутентифікатор до виклику HTTParty.get із програми Rails. Перш за все, для цілей тестування, я хочу жорстко закодувати облікові дані для входу в Контролер. Тільки щоб переконатися, що це працює. Але я не можу знайти жодної документації чи прикладів того, як ви можете їх передавати.

HTTParty.get без облікових даних чудово працює:

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

Але я не бачу, як я можу змінити це, що приймає частину -u username: password .

Наступним викликом для мене (я дуже новачок у Ruby / Rails) є отримання облікових даних користувача з форми користувача та їх динамічне передавання, але найголовніше для мене зараз - це задіяти жорстко закодовану версію.

Відповіді:


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

1
Дякую, працює! Ви отримали це з якогось документа HTTParty, або це слід вважати "стандартним" синтаксисом рейок, який мені потрібно засвоїти ... :-)
Dr.Bob


4
І auth = {username: "test", password: "test"}так само добре працює з Ruby 1.9.
Джо

2
@Vasiliy Ermolovich Це не працює з String basic auth, наприклад auth = "testuser:password", як ми можемо змусити його працювати таким чином?
kamal

5
Ви можете зробити так само: rubydoc.info/github/jnunemaker/httparty/…
Адріано Тадао

0

Два бали,

  1. Якщо ви натискаєте api Twitter, якщо я не помиляюсь, я не думаю, що вони вже дозволяють базовий аутентифікатор :( Тож ви можете розглянути щось на зразок OmniAuth для входу в OAuth. Вам не потрібні HTTParty або вхід- у формі для цього ви посилаєтесь на вхід у Twitter, і користувач вводить туди облікові дані, після чого Twitter надсилає запит на зворотний дзвінок у вашу програму після автентифікації. OmniAuth виконує більшу частину роботи за вас, ви просто витягуєте потрібну інформацію з що це дає вам у маршруті зворотного дзвінка.

  2. Але навіть незважаючи на це, вам все одно знадобляться "споживчий ключ" та "споживчий секрет" OAuth, які є специфічними для вашої програми (як Twitter авторизує вашу програму, на відміну від користувача). І ви не хочете ні цих, ні будь-яких ключів автентифікації у своєму вихідному коді.

Типовий спосіб зробити це - вставити їх у 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

Ви можете застосувати подібний підхід із завантаженням основного імені користувача / пароля для автентифікації, просто вставте їх у якийсь об’єкт, до якого ви матимете доступ, де б ви не здійснювали виклики HTTParty.


Привіт Ерік, дякую за додаткову інформацію. URL-адреса Twitter є лише для прикладу, оскільки справжній API, з яким я розмовляю, є приватною системою. Це працює для мене, і, сподіваюся, для інших, хто використовує httparty як клієнт REST. Вибачте за можливу плутанину! Ваша додаткова інформація теж цікава, я працюю з нею, як тільки я перейду до додатка.
Dr.Bob
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.