In REST wird ein 403-Fehler angezeigt

7

Also versuche ich es mit REST. Drupal-8.0.0-beta12 in einer VM installiert. cURL funktioniert einwandfrei mit, curl http://testing.dev/drupal8/node/1?_format=jsonaber ich bin nicht sicher, warum ich 403mit dem dev HTTP-Client eine Fehlermeldung erhalte:

Geben Sie hier die Bildbeschreibung ein

Irgendwelche Ideen?

dsdeiz
quelle
Haben Sie tatsächlich eine Route mit json als Anforderung angegeben? Wie hier
alexej_d
Warum funktioniert cURL, während der dev http-Client dies nicht tut? Diese Lösung scheint ebenfalls nicht dokumentiert zu sein.

Antworten:

2

Haben Sie die richtigen Berechtigungen für anonyme Benutzer, auf die Ressource zuzugreifen?

testing.dev/drupal8/admin/people/permissions Stellen Sie unter RESTFul Web Services sicher, dass das Kontrollkästchen Access GET on Content resourcefür anonymen Benutzer aktiviert ist. Leeren Sie den Cache und versuchen Sie es erneut.

Möglicherweise ist der Formattyp für diese Ressource in Ihrer rest.settings.ymlDatei nicht verfügbar. Diese Datei legt die unterstützten Formate und die Authentifizierung fest. So sollte es in Ihrem Fall aussehen:

resources:
  'entity:node':
    GET:
      supported_formats:
        - hal_json
        - json
      supported_auth:
        - cookie
bart_88
quelle
Drupal 8.2.3 hat auf der Seite admin / people / permissions unter RESTful kein "Access GET on Content-Ressource". Übrigens habe ich die RestUI und andere Module aktiviert. & Aktivieren Sie den Inhalt in REST-Ressourcen.
bluesky_still
Wie funktioniert das in drupal> 8.2.3? Ich kann anscheinend nicht herausfinden, wie anonyme Benutzer den Zugriff auf GET aktivieren können.
Dibs
2

@dibs und @bluesky_still Ich hoffe, das wird euch helfen, wenn nicht das Originalposter:

Ich denke, die REST-Benutzeroberfläche ist für 8.2.3 nur ein No-Go.

Folgendes habe ich getan, um einige GET- und POST-Anfragen zum Laufen zu bringen:

Einrichten der REST-Konfigurationen

Sie müssen die yml für den Entitätstyp bearbeiten, für den Sie die REST-Konfigurationen ändern möchten. Beispielsweise würde die Knotenentität rest.resource.entity.node.yml verwenden. Ich habe den Eindruck bekommen, dass RESTUI mit 8.2+ wirklich nicht nützlich ist, also musst du es von Hand machen. Sobald Sie diese Datei nach Ihren Wünschen erstellt haben, müssen Sie sie auf Ihre Site importieren.

Ich kann immer noch nicht herausfinden, wie ich das "richtig" machen soll; Ich weiß nicht, ob Sie den Konfigurationsimporter verwenden müssen (der einen UUID-Fehler auslöst) oder ihn in ein Thema oder in Ihre Standardeinstellungen aufnehmen müssen oder was. Ich habe die Konfiguration zum Laufen gebracht. Am Ende habe ich das Funktionsmodul verwendet, um ein Funktionspaket für die REST-Ressourcenkonfiguration (admin / config / development / features / edit) zu erstellen, die Funktion heruntergeladen, das Paket entpackt und das durch die Änderungen erstellte Modul installiert.

Ich habe dann die Konfigurationsdateien im Verzeichnis des erstellten Moduls (DRUPAL_ROOT / modules / MODULE_NAME / config / install / rest.resource.entity.node.yml) manuell bearbeitet, um die gewünschten Einstellungen zu erhalten. Schließlich habe ich die Änderungen implementiert, indem ich die Funktion auf der Konfigurationsseite für Funktionen aktualisiert habe (admin / config / development / features / Klicken Sie auf "Geändert" neben dem von Ihnen erstellten Modul, klicken Sie auf das Kontrollkästchen neben den Änderungen und klicken Sie auf "Importieren" Änderungen").

Es muss eine einfachere Möglichkeit geben, den Import zu handhaben, aber es funktioniert für mich unter 8.2.3.

Benutzerberechtigungen

Sobald Ihre REST-Konfigurationen eingerichtet sind, sollten die Entitätstypen den Berechtigungen folgen, die Sie in / admin / people / permissions / festgelegt haben. Wenn anonyme Benutzer veröffentlichte Knoten anzeigen können, sollten sie auch veröffentlichte Knoten usw. abrufen können (zumindest gemäß der Dokumentation ).

Wenn Sie immer noch Probleme haben, müssen Sie sicherstellen, dass das csdrToken in den Header Ihrer Anfrage aufgenommen wird.

Das csrfToken

Eine GET-Anforderung an den Endpunkt YOUR_SITE.DOMAIN / rest / session / token stellt Ihnen ein Token zur Verfügung, das Sie als X-CSRF-Token-Header für Ihre GET- oder POST-Anforderung festlegen können. Ein typisches und einfaches Beispiel für die Verwendung von jQuery zum Abrufen des ersten Eintrags könnte folgendermaßen aussehen:

function getFirstNode() {
  jQuery
    .get('YOURSITE/rest/session/token')
    .done(function (data) {
      var csrfToken = data;
      jQuery.ajax({
        url: 'YOURSITE/web/node/1?_format=hal_json',
        method: 'GET',
        headers: {
          'Content-Type': 'application/hal+json',
          'X-CSRF-Token': csrfToken,
        },
        success: function (node) {
          console.log(node);
        }
      });
  });
}

Wenn alle Stricke reißen

Ich hatte auch Erfolg beim Einrichten von GET-Endpunkten mithilfe des Ansichtsmoduls. Dieser Artikel erklärt den Prozess ziemlich gut: http://redcrackle.com/blog/rest-export-views-drupal-8 . Es funktioniert nicht für POST-Anfragen, sollte aber helfen.

Ich hoffe das hilft. Es ist ein wirklich heikles Problem für eine einfache Anfrage, und die Dokumentation leistet keinen großartigen Beitrag dazu, diese zugänglich zu machen. Viel Glück!

Christopher Borchert
quelle