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