Ruby on Rails:如何使用OAuth2 :: AccessToken.post?

Ale*_*vin 10 ruby ruby-on-rails oauth-2.0

OAuth2 :: AccessToken.post()方法在文档中指定如下:

(对象)post(path,opts = {},&block)

我试图传递一些论点,但似乎我做错了:

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

参数永远不会达到方法,值总是为零.那么,使用post方法和参数的正确方法是什么?什么是&块?

我也得到了警告:无法验证CSRF令牌的真实性.这也可能导致问题.案例是我在应用程序外部使用OAuth api.OAuth 2通过Doorkeeper gem实现.

更新:在我定义范围后,CSRF警告现在消失了.此外,我设法通过提供url的一部分来使用带有参数的post()方法:"?title = test&...".仍然很高兴知道如何使用此方法记录.

Mat*_*att 9

POST或PUT中的主体可通过选项主体参数访问.没有这方面的文件.不得不查看oauth客户端代码本身来发现这个:

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

你的例子,正确的身体将是:

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

  • 如果您需要提供标题,它将如下所示:`token.post('/ some/url',{:body => json_str,:headers => {'Content-Type'=>'application/json' }})` (5认同)

小智 4

您可以使用块传递参数来发布请求:

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

OAuth2 gem 使用法拉第,该request对象是法拉第请求,因此您可能需要检查其他随请求传递参数的方法

法拉第宝石 => https://github.com/lostisland/faraday