Ruby on Rails: как использовать OAuth2:: AccessToken.post?

Метод OAuth2:: AccessToken.post() указан в документации:

(Object) post (путь, opts = {}, & block)

Я пытаюсь передать некоторые аргументы, но кажется, что я ошибаюсь:

response = token.post('/oauth/create.js', {:title => "title", :description => "desc"})

Параметры никогда не достигают метода, значения всегда равны нулю. Итак, каков правильный способ использования метода post с аргументами? И что это за блок?

Я также получаю ПРЕДУПРЕЖДЕНИЕ: Невозможно проверить подлинность CSRF-токена. Это может также способствовать решению проблемы. Дело в том, что я использую OAuth api извне приложения. OAuth 2 реализуется с помощью драгоценного камня Doorkeeper.

Обновление. Предупреждение CSRF исчезло после определения областей. Также мне удается использовать этот метод post() с аргументами, предоставляя как часть URL-адреса: "? title= test &...". Тем не менее было бы неплохо знать, как использовать этот метод как задокументированный.

Ответ 1

Тело в POST или PUT доступно через параметр body. Нет документации по этому вопросу. Если бы вы сами нашли в коде клиента oauth, чтобы обнаружить это:

https://github.com/intridea/oauth2/blob/ebe4be038ec14b3496827d29cb224235e1c9f468/lib/oauth2/client.rb

Ваш пример с правильным телом будет:

response = token.post('/oauth/create.js', {body: {:title => "title", :description => "desc"}})

Ответ 2

Вы можете использовать блок для передачи параметров для отправки запроса:

token.post('/oauth/create.js') do |request|
  request.params['title'] = "something"
end

OAuth2 gem использует faraday, объект request - это faraday-запрос, поэтому вы можете проверить другие способы передачи параметров вместе с запросом

faraday gem = > https://github.com/lostisland/faraday