我正在通过使用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]
但是我在第二步遇到错误请求错误,即使用上面步骤中收到的请求令牌获取访问令牌:
access_token = RestClient.post 'https://getpocket.com/v3/oauth/authorize', :consumer_key => @consumer_key, :code => @code
400错误请求是我在Ruby应用程序错误屏幕上得到的。我也尝试过使用cURL和POSTMan Chrome扩展程序的相同请求,我得到的状态代码是:403 Forbidden。我得到的X-Error Code是158,它转换为X-Error消息“User rejects code”。在Pocket API文档上:http://getpocket.com/developer/docs/authentication。
由于我已经尝试了几个不同的通道来测试这个请求并且每次都失败了,我猜这个问题不是解析,而是我可能会遗漏一个重要的细节或一个步骤(也许是HTTP请求头?) 。感谢您的帮助!
答案 0 :(得分:7)
原来我(或我们)遗漏了一个重要的细节:
每当在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的任何人的旁注,有一个很好的包装宝石:https://github.com/turadg/pocket-ruby
答案 1 :(得分:2)
我可以确认您确实缺少HTTP标头,这会导致Pocket服务器拒绝您尝试发送的帖子请求。
有几种方式可以传递标题:有时它们通过与服务器请求相关联的代码/令牌进行通信(这里似乎不是这种情况)。您需要使用"授权"根据您的初始请求使用OAuth执行此操作的标题。
This可以帮助您:注意"授权:" " Content-Type之后的标题:" header包含返回的信息。
对于某些深度阅读,请转到here。
我可能还会建议您尝试OAuth2 gem来完成大部分请求 - 这可能会简化您所做的事情!