Pracuję nad tym zagadnieniem od kilku tygodni i nie mogę znaleźć rozwiązania dla mojego życia. Fakt, że nie znalazłem żadnej porządnej dokumentacji (na stronie internetowej Drupala lub gdziekolwiek indziej) również nie pomaga. A pytania już tu zadane są nieaktualne (Usługi 2.x).
Próbuję utworzyć usługę REST dla witryny wspieranej przez Drupal Commerce. Na razie wszystko, co usługa musi zrobić, to zezwolić na podstawowe operacje CRUD na zasobie Order, i być zabezpieczonym OAuth, OAuth 2.0 nie jest konieczny. Musi być również wywoływany za pomocą skryptu na serwerze, więc przekierowanie logowania jest niemożliwe (wszystko odbywa się za pomocą uwierzytelniania 2-etapowego).
Obecny stos to:
- PHP 5.3.15
- Drupal 7.15
- Profil Commerce Kickstart (7.x-2.0-rc1)
- Usługi 7.x-3.2
- OAuth 7.x-3.0 + 18-dev
- Uwierzytelnianie OAuth 7.x-3.2
- Serwer REST 7.x-3.2
- Commerce Services 7.x-1.x-dev (jest to moduł, do którego dodałem swój niestandardowy kod zamówienia)
Mogę w pewnym sensie uruchomić funkcje pobierania / indeksowania dla zamówień, jeśli korzystam z biblioteki OAuth PHP i po prostu wywołuję żądanie tokena za każdym razem (nawet nie jestem pewien, co się tam dzieje, poza tym, że uwierzytelnia się ...). Jeśli jednak spróbuję wysłać zamówienie do zamówień i utworzyć zamówienie, otrzymam 406 ze skryptem i 401, gdy spróbuję bezpośredniego żądania POST z konsoli REST w Google Chrome, nawet gdy OAuth jest wyłączony.
To sprawiło, że debugowanie stało się koszmarem, ponieważ nie mam pojęcia, co się dzieje w mojej funkcji tworzenia. Próbowałem usunąć go z logiki tworzenia zamówień i po prostu powtórzyć ładunek żądania. Nadal dostaję błędy 406/401.
Zakładam, że otrzymuję błędy 401, ponieważ zamówienia wymagają uwierzytelnienia użytkownika (nawet jeśli OAuth jest wyłączony dla usługi).
Nie rozumiem jednak, dlaczego dostaję błędy 406. Akceptuję aplikację / json, którą zwraca mój serwer REST.
Zamówienia nie były tworzone, nawet zanim skomentowałem logikę tworzenia zamówień. (Z którego skutecznie korzystam w innym miejscu witryny).
Docenienie z góry.
-T
Odpowiedzi:
Żądania Get nie wymagały uwierzytelnienia sesji, POST, PUT, DELETE wymagają uwierzytelnienia sesji, aby poznać użytkownika i sprawdzić, czy ma on odpowiednie uprawnienia do wykonania żądania, czy nie.
Uwierzytelnianie Oauth ma wiele rodzajów uwierzytelniania, musisz upewnić się, że uwierzytelniasz użytkownika, a nie aplikację (na przykład), aby żądanie zostało autoryzowane do wykonania.
źródło
Czy to samo sprawdziłeś po wyłączeniu uwierzytelniania oAuth? Jeśli nie, spróbuj po zwróceniu przykładowego obiektu json obj w zgłoszeniu serwisowym.
źródło