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

第一步,获得请求令牌可以正常工作:

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

但是我在第二步中收到一个Bad Request错误,该错误是使用上一步中收到的请求令牌获取访问令牌:
access_token = RestClient.post 'https://getpocket.com/v3/oauth/authorize', :consumer_key => @consumer_key, :code => @code

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

由于我尝试了几种不同的渠道来测试此请求并每次均失败,因此我猜测问题不在于解析,而是我可能缺少了重要的细节或步骤(也许是HTTP请求标头?)。谢谢您的帮助!

最佳答案

事实证明,我(或我们)一直缺少一个重要的细节:

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

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

现在,即使您之前允许您的应用访问您的帐户,在每次调用中,Pocket API都不会在访问此URL之前激活请求令牌。只有这样,您的请求令牌才会被激活,并且可以用于第二个身份验证步骤。这样做后效果很好。

作为在Ruby on Rails中使用Pocket API的任何人的补充说明,有一个不错的包装器gem:https://github.com/turadg/pocket-ruby

08-27 15:28