2012-07-30 17 views
10

Zaimplementowałem interfejs REST API i zabezpieczyłem go odźwiernym. Napisałem mały program klienta, aby uzyskać do niego dostęp i działa dobrze przy użyciu przepływu danych poświadczającego właściciela zasobów.Pisanie w OAuth za pomocą poświadczeń klienta z Doorkeeper

Teraz próbuję wykonać połączenie przy użyciu poświadczeń klienta flow. Więc poszedłem za przykładem w linku.

Wszystko działa wspaniale, gdy używam żądania GET, ale gdy używam żądania POST, otrzymuję numer 401 Unauthorized. Jest to wywołanie metody, która nie wymaga właściciela zasobu.

Jedynym istotnym rzeczą mam w moim kontrolera API:

doorkeeper_for :all 

nie wprowadziły żadnych zakresów ani nic w tym rodzaju (mam obowiązek?).

Mój klient kod wygląda następująco (dokładnie jak w 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}" } 

jakiś pomysł co mogę robić źle? Czy jest coś specjalnego, co powinienem zrobić w mojej aplikacji, aby umożliwić przepływ poświadczeń klienta?

Odpowiedz

16

Wymyśliłem to. Problem polegał na tym, że nie użyłem poprawnie narzędzia RestClient.post. Drugi parametr powinien być ładunkiem, a trzeci powinien być nagłówkiem. Powinno być coś takiego:

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

Czytanie odpowiedzi pomogło mi rozwiązać problem, który miałem. Dziękuję, że wróciłeś i rozwiązałeś to! – lyonsinbeta

Powiązane problemy