Ich arbeite jetzt seit ein paar Wochen an diesem Problem und kann keine Lösung für mein Leben finden. Die Tatsache, dass ich keine anständige Dokumentation gefunden habe (auf der Drupal-Website oder anderswo), ist ebenfalls keine Hilfe. Und die Fragen, die hier bereits gestellt werden, sind veraltet (Services 2.x).
Ich versuche, einen REST-Service für eine von Drupal Commerce unterstützte Site zu erstellen. Derzeit muss der Dienst lediglich grundlegende CRUD-Operationen für die Bestellressource zulassen und mit OAuth gesichert werden. OAuth 2.0 ist nicht erforderlich. Es muss auch mit einem Skript auf einem Server aufgerufen werden, sodass Umleitungen der Anmeldung nicht möglich sind (alles erfolgt mit zweibeiniger Authentifizierung).
Der aktuelle Stapel lautet:
- PHP 5.3.15
- Drupal 7.15
- Commerce Kickstart-Profil (7.x-2.0-rc1)
- Dienstleistungen 7.x-3.2
- OAuth 7.x-3.0 + 18-dev
- OAuth-Authentifizierung 7.x-3.2
- REST Server 7.x-3.2
- Commerce Services 7.x-1.x-dev (Dies ist das Modul, zu dem ich meinen benutzerdefinierten Bestellcode hinzugefügt habe)
Ich kann die Retrieve / Index-Funktionen für Orders zum Funktionieren bringen, wenn ich eine OAuth-PHP-Bibliothek verwende und jedes Mal die Token-Anfrage aufrufe (ich bin mir nicht einmal sicher, was dort vor sich geht, außer dass sie sich authentifiziert ...). Wenn ich versuche, auf Bestellungen zu posten und eine Bestellung zu erstellen, erhalte ich 406 mit dem Skript und 401, wenn ich eine direkte POST-Anfrage von der REST-Konsole in Google Chrome versuche, selbst wenn OAuth deaktiviert ist.
Dies hat das Debuggen zu einem Albtraum gemacht, da ich keine Ahnung habe, was in meiner Erstellungsfunktion vor sich geht. Ich habe versucht, die Logik für die Auftragserstellung zu entfernen und die Anforderungsnutzdaten einfach wiederzugeben. Erhalten Sie immer noch die 406/401 Fehler.
Ich gehe davon aus, dass ich die 401-Fehler erhalte, da für Bestellungen eine Benutzerauthentifizierung erforderlich ist (auch wenn OAuth für den Dienst deaktiviert ist).
Ich verstehe nicht, warum ich die 406-Fehler bekomme. Ich akzeptiere application / json, was mein REST-Server zurückgeben soll.
Bestellungen wurden noch nicht erstellt, bevor ich die Logik zur Auftragserstellung auskommentiert habe. (Was ich an anderer Stelle auf der Website effektiv benutze.)
Wertschätzung im Voraus.
-T
Antworten:
Für das Abrufen von Anforderungen war keine Sitzungsauthentifizierung erforderlich. Für POST, PUT und DELETE ist eine Sitzungsauthentifizierung erforderlich, um den Benutzer zu kennen und zu prüfen, ob er über die richtigen Berechtigungen zum Abschließen der Anforderung verfügt oder nicht.
Bei der Oauth-Authentifizierung gibt es viele Arten von Authentifizierung. Sie müssen sicherstellen, dass Sie den Benutzer authentifizieren, nicht die App (zum Beispiel), damit die Anforderung zum Abschließen berechtigt ist.
quelle
Haben Sie dies auch beim Ausschalten der oAuth-Authentifizierung überprüft? Wenn nicht, probieren Sie es aus, nachdem Sie bei Ihrem Serviceabruf ein Beispiel für json obj zurückgegeben haben.
quelle