2014-01-28 8 views
5

i Pförtner gem schauenPförtner gibt 401 Unauthorized

meine Application wie dies bin mit:

private 
def current_resource_owner 
    Person.find(doorkeeper_token.resource_owner_id) if doorkeeper_token 
end 

meine DemosController wie folgt aussehen:

doorkeeper_for :index 
respond_to :json 
def index 
    respond_with current_resource_owner 
end 

Antwort kommt wie folgt aus:

Started GET "/?code=f88d2e95b1b286645d31772c395e0e36708a5i0p970836af640f631bb4f043b5" for 127.0.0.1 at 2014-01-28 11:10:56 +0530 
Processing by DemosController#index as HTML 
Parameters: {"code"=>"f88d2e95b1b286645d31135c395e0e36708a5b5b970836af640f631bb4f043b5"} 
Filter chain halted as #<Proc:[email protected]/home/xyz/.rvm/gems/[email protected]/gems/doorkeeper-1.0.0/lib/doorkeeper/helpers/filter.rb:8> rendered or redirected 
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms) 
+0

Haben Sie dieses Problem lösen können? Ich bekomme den gleichen Fehler. –

Antwort

0

Ihre respond_to muss auch in HTML reagieren, weil Sie „DemosController # Index als HTML“ anfordern

respond_to :html, :json 
2

Dies ist tatsächlich ein Problem auf Pförtner. Um eine benutzerdefinierte JSON-Antwort für 401 Unauthorized Fehler statt einer leeren Seite zu haben, in Application ich hinzugefügt:

def doorkeeper_unauthorized_render_options 
    {json: '{"status": "failure", "message":"401 Unauthorized"}'} 
end 
1

Ich bin nicht 100% sicher, ob ich das richtig verstehe Ihre Frage. Ihr Code sieht gut aus, aber die Anfrage scheint falsch zu sein.

Mit Doorkeeper benötigen Sie einen Access Token und nicht den Code-Parameter, um auf die Ressource zuzugreifen (DemosController # index). Zuallererst müssen Sie das Access Token vom Autorisierungscode erhalten. Stellen Sie daher eine Anfrage

GET "/oauth/token?code=...&grant_type=authorization_code&redirect_uri=...&client_id=...&client_secret=..." 

Vergewissern Sie sich, dass die redirect_uri mit der mit Ihrer Client-Anwendung registriert einstimmt, und fügen Sie den richtigen client_id und client_secret auf die Anfrage. Verwenden Sie auch immer einen neuen Code-Parameter. Standardmäßig ist es nur 10 Minuten nach der Generierung gültig. Beachten Sie, dass bei benutzerdefinierten Doorkeeper-Routen die URL (/ oauth/token) unterschiedlich sein kann.

Wenn Sie die Anforderung korrekt ausgeführt haben, enthält die Antwort ein gültiges Zugriffstoken.

Dann machen Sie eine GET-Anfrage an "/index.json?access_token = ..." statt "/? Code = ...". '.json' teilt Rails mit, dass Ihr Client mit JSON umgehen kann. Andernfalls erhalten Sie eine Antwort von 406, was bedeutet, dass das angeforderte Format (standardmäßig HTML) nicht unterstützt wird. Statt '.json' können Sie auch Accept = "application/json" im HTTP-Header senden.

Die 401 Nicht autorisierte Antwort, was Sie gerade erhalten, bedeutet, dass die Authentifizierungsinformationen (in Ihrem Fall ein gültiger Access Token) falsch oder überhaupt nicht vorhanden sind.

Hoffe, dass hilft.