dav*_*rac 10 ruby rest ruby-on-rails oauth ruby-on-rails-3
我已经实现了一个REST API并用门卫保护它.我已经编写了一个小型客户端程序来访问它,它使用资源所有者凭据流工作正常.
现在我正在尝试使用客户端凭据流实现调用.所以我按照链接中的示例进行了操作.
当我使用GET请求时,一切都很好,但是当我使用POST请求时,我得到了一个401 Unauthorized.这是对不需要资源所有者的方法的调用.
我在API控制器中唯一相关的事情是:
doorkeeper_for :all
Run Code Online (Sandbox Code Playgroud)
我没有实现任何范围或任何类型(我是否需要?).
我的客户端代码看起来像这样(与github中的示例完全相同):
require 'rest-client'
require 'json'
client_id = 'my_client_id...'
client_secret = 'my_client_secret...'
response = RestClient.post 'http://localhost:3000/oauth/token', {
grant_type: 'client_credentials',
client_id: client_id,
client_secret: client_secret
}
token = JSON.parse(response)["access_token"]
# this line works great:
RestClient.get 'http://localhost:3000/api/v1/flights.json', { 'Authorization' => "Bearer #{token}" }
# this line always fails (401 Unauthorized):
RestClient.post 'http://localhost:3000/api/v1/flights.json', { 'Authorization' => "Bearer #{token}" }
Run Code Online (Sandbox Code Playgroud)
知道我可能做错了吗?在我的应用程序中是否应该执行一些特殊操作以启用客户端凭据流?
dav*_*rac 16
我想到了.问题是我没有正确使用RestClient.post.第二个参数应该是有效载荷,第三个应该是标题.它应该是这样的:
RestClient.post 'http://localhost:3000/api/v1/flights.json', {}, { 'Authorization' => "Bearer #{token}" }
Run Code Online (Sandbox Code Playgroud)