【问题标题】:Ruby on Rails: how to use OAuth2::AccessToken.post?Ruby on Rails:如何使用 OAuth2::AccessToken.post?
【发布时间】:2017-01-12 19:04:31
【问题描述】:

OAuth2::AccessToken.post() 方法在文档中是这样指定的:

(对象)发布(路径,opts = {},&block)

我正在尝试传递一些参数,但似乎我做错了:

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

参数永远不会到达方法,值总是零。那么,使用带有参数的 post 方法的正确方法是什么?那个 &block 是什么?

我也收到警告:无法验证 CSRF 令牌的真实性。这也可能导致问题。情况是我从应用程序外部使用 OAuth api。 OAuth 2 是通过 Doorkeeper gem 实现的。

更新:在我定义范围后,CSRF 警告现在消失了。我也设法通过提供作为 url 的一部分来使用这个 post() 方法和参数:“?title=test&...”。仍然很高兴知道如何按照文档说明使用此方法。

【问题讨论】:

    标签: ruby-on-rails ruby oauth-2.0


    【解决方案1】:

    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"}})
    

    【讨论】:

    • 谢谢你!救了我的培根!!
    • 如果你需要提供标题,它看起来像这样:token.post('/some/url', {:body => json_str, :headers => {'Content-Type' => 'application/json'}})
    • 我收到签名无效错误。我需要再次签署请求吗?
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2011-06-27
      • 2016-10-21
      • 2018-03-14
      • 1970-01-01
      相关资源
      最近更新 更多