ruby-on-rails - Pocket API 授权 : Forbidden

标签 ruby-on-rails oauth httprequest rest-client pocket

我正在通过使用 Pocket API 构建 Rails 应用程序来测试 RoR,并且我必须授权用户。对于 HTTP 请求,我使用 https://github.com/rest-client/rest-client图书馆。

第一步,获取请求 token 工作正常:

require 'rest_client'
response = RestClient.post 'https://getpocket.com/v3/oauth/request', :consumer_key => @consumer_key, :redirect_uri => @redirect_uri
@code = response.split("=")[1]

但我在第二步收到错误请求错误,即使用在上述步骤中收到的请求 token 获取访问 token :
access_token = RestClient.post 'https://getpocket.com/v3/oauth/authorize', :consumer_key => @consumer_key, :code => @code

400 Bad Request 是我在 Ruby 应用程序错误屏幕上看到的。我也用 cURL 和 POSTMan Chrome 扩展程序尝试了相同的请求,然后我得到的状态代码是:403 Forbidden。我得到的 X 错误代码是 158,它转换为 X 错误消息“用户拒绝代码”。在 Pocket API 文档上:http://getpocket.com/developer/docs/authentication .

由于我尝试了几个不同的 channel 来测试这个请求并且每次都失败了,我猜测问题不在于解析,而是我可能遗漏了一个重要的细节或步骤(也许是 HTTP 请求 header ?)。提前感谢您的帮助!

最佳答案

事实证明,我(或我们)遗漏了一个重要的细节:

每当在 POSTMan 或其他任何地方测试您对 Pocket API 的请求时,我们自然会跳过访问以下形式的授权 URL 的过程:

https://getpocket.com/auth/authorize?request_token=YOUR_REQUEST_TOKEN&redirect_uri=YOUR_REDIRECT_URI

现在,即使您之前可能允许您的应用访问您的帐户,在每次调用时,Pocket API 不会在访问此 URL 之前激活请求 token 。只有这样您的请求 token 才会被激活并可用于第二个身份验证步骤。这样做后它工作正常。

对于在 Ruby on Rails 中使用 Pocket API 的任何人来说,有一个很好的包装 gem:https://github.com/turadg/pocket-ruby

关于ruby-on-rails - Pocket API 授权 : Forbidden,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27636000/

相关文章:

ruby-on-rails - Rubymine - 未找到 Rails gem

ruby-on-rails - 是否需要“bundler/setup”与运行 Bundler.setup 相同?

ruby-on-rails - Ruby 代码在路由工作时没有得到解释

javascript - Slack oauth.access API 返回 bad_redirect_uri 而不请求 redirect_uri

mysql - 在我的数据库中存储 oauth key 的最佳做法是什么?

java - window.open 的 url 中包含法语字符

javascript - 找不到 HotelsController#rooms_availability 的模板,渲染头 :no_content

amazon-web-services - 无效的重定向 : domain must be added to the authorized domains list despite it being there

java - 如何使用 ESAPI 修复 HTTP Response splitting 漏洞

httprequest - Fiddler 2重建加密请求