2012-07-30 3 views
10

Ich habe eine REST-API implementiert und mit Doorkeeper geschützt. Ich habe ein kleines Client-Programm geschrieben, um darauf zuzugreifen, und es funktioniert gut mit dem Ressource-Besitzer-Anmeldedatenfluss.POSTing in OAuth mit Client-Anmeldeinformationen mit Doorkeeper

Jetzt versuche ich einen Anruf mit den Client-Anmeldeinformationen flow zu implementieren. Also ich habe das Beispiel im Link verfolgt.

Alles funktioniert gut, wenn ich eine GET-Anfrage verwende, aber wenn ich eine POST-Anfrage verwende, bekomme ich eine 401 Unauthorized. Dies ist ein Aufruf einer Methode, für die kein Ressourcenbesitzer erforderlich ist.

Die einzige relevante, was ich in meinem API-Controller haben, ist:

doorkeeper_for :all 

ich nicht implementiert haben keine Bereiche oder gar nichts von dieser Art (bin verpflichtet, ich?).

Mein Client-Code sieht wie folgt aus (genau wie in den example in 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}" } 

Jede Idee, was ich kann tun, falsch sein? Gibt es etwas Spezielles, das ich in meiner Anwendung tun sollte, um den Client-Berechtigungsnachweis zu ermöglichen?

Antwort

16

Ich fand es heraus. Das Problem war, dass ich RestClient.post nicht richtig benutzt habe. Der zweite Parameter sollte die Payload sein und der dritte sollte der Header sein. Es sollte so etwas sein:

RestClient.post 'http://localhost:3000/api/v1/flights.json', {}, { 'Authorization' => "Bearer #{token}" } 
+2

Das Lesen Ihrer Antwort half mir, ein Problem zu beheben, das ich hatte. Danke, dass du zurückgekommen bist und das gelöst hast! – lyonsinbeta