logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll
21/05/2025, by Ivan

JSON:API ist vollständig entitätsbasiert. Das bedeutet, es kann keine Geschäftslogik verarbeiten oder Dinge tun, die nicht als "CRUD" (Create, Read, Update, Delete) verstanden werden können. Geschäftslogik wie das Registrieren eines neuen Kontos, das Einloggen eines Benutzers oder das Anfordern eines neuen Passworts sind nicht Teil von JSON:API. Viele dieser Funktionen werden bereits vom Drupal Core bereitgestellt.

Eine nicht abschließende Liste häufiger Anforderungen und Lösungen findest du unten.

Interessante Pfade sind:

  • /session/token
  • /user/register
  • /user/login
  • /user/login_status
  • /user/logout

Abrufen eines Session-Tokens

Token abrufen

curl \
  --request GET http://drupal.d8/session/token

Das Token wird als einfacher Text (kein JSON) im Antwort-Body zurückgegeben.

Tokens verwenden

Neben einem Session-Token erhältst du beim Login ein csrf_token und ein logout_token. Du benötigst das logout_token, um einen Benutzer abzumelden (siehe unten). Das csrf_token oder das Session-Token ist für verändernde Requests (z. B. POST, PATCH und DELETE) erforderlich.

Benutzerregistrierung

Während JSON:API (wie im Core bereitgestellt) keine neuen Benutzerregistrierungen unterstützt, kannst du das JSON:API User Resources Modul installieren, um benutzerbezogene JSON:API-Endpunkte hinzuzufügen, darunter Endpunkte für Registrierung, Passwort zurücksetzen und Passwort-Änderung.

Alternativ kannst du das Core REST-Modul verwenden. Um Benutzern die Registrierung per REST zu erlauben, muss die user_registration REST-Resource aktiviert werden (siehe das REST UI Beispiel unten).

curl \
--header "Content-Type: application/json" \
--header "X-CSRF-Token: 57sTS-KS7UoYAWAPyzt0iJmo300CFct3jdKyWM-UiiQ" \
--request POST "https://drupal.d9/user/register?_format=json" \
--data '{"name": {"value": "thename123"}, "pass": {"value": "thepass"}, "mail": {"value": "someone@example.com"}}'

Verwende den Wert des Session-Tokens im X-CSRF-Token Header. Eine erfolgreiche Antwort sollte einige Benutzerfeldwerte, einschließlich der UUID des neu erstellten Benutzers, enthalten:

{
   "uuid" : [ { "value" : "3e75b757-831e-4bf7-bbb6-25b8c50c7ac0" } ]
}

Beachte auch, dass die Antwort keine "Set-Cookie" Header enthält, selbst wenn Besucher berechtigt sind, selbst ein Konto zu erstellen. Falls keine Genehmigung oder Bestätigung erforderlich ist, kannst du den Benutzer nach erfolgreicher Registrierung mit denselben name- und pass-Werten einloggen.

Benutzer-Login

curl \
  --header "Content-type: application/json" \
  -c cookie.txt \
  --request POST "http://drupal.d8/user/login?_format=json" \
  --data '{"name":"admin", "pass":"admin"}'

Das -c cookie.txt weist curl an, ein Cookie zu speichern. Die Antwort sollte ungefähr so aussehen:

{
   "csrf_token" : "57sTS-KS7UoYAWAPyzt0iJmo300CFct3jdKyWM-UiiQ",
   "logout_token" : "zzRaD8ZgLT1TkG804mYpVVTyM-pgoDm4h9XZ9JHSoCw",
   "current_user" : {
      "roles" : [
         "authenticated",
         "administrator"
      ],
      "name" : "admin",
      "uid" : "1"
   }
}

Benutzerstatus

curl \
  --header "Content-type: application/json" \
  -b cookie.txt \
  --request GET "http://drupal.d8/user/login_status?_format=json"

-b cookie.txt weist curl an, das Cookie der letzten Anfrage zu senden (nicht zu speichern). Wenn du eingeloggt bist, wird 1 im Antwort-Body (Plain Text, kein JSON) zurückgegeben, sonst 0.

Benutzer-Logout

curl \
  --header "Content-type: application/json" \
  -b cookie.txt \
  --request POST "http://drupal.d8/user/logout?_format=json&token=zzRaD8ZgLT1TkG804mYpVVTyM-pgoDm4h9XZ9JHSoCw"

Damit wird der durch cookie.txt authentifizierte Benutzer ausgeloggt. Verwende das logout_token im token-Query-Parameter.

Authentifizierungs-Mechanismen

Das obige Beispiel ist nur einer von vielen verfügbaren Authentifizierungsmechanismen. Du solltest prüfen, welcher Mechanismus für deine Anforderungen am besten geeignet ist.

Ein Drupal OAuth-Modul ist als simple_oauth verfügbar.

Referenzen

Siehe diese Change-Records für mehr Informationen:

Für Authentifizierung kannst du auch andere Authentifizierungsprotokolle verwenden.

Wenn du dich für den "Cookie"-Weg mit einer JavaScript-Anwendung im Frontend und Drupal im Backend entscheidest, kann der Browser die Cookie-Speicherung für dich übernehmen. Vergiss nur nicht: Wenn deine JS-App und die Drupal-Seite unterschiedliche Domainnamen haben, musst du dem Browser erlauben, die Session-Cookies der Nutzer zu speichern, indem du den SameSite-Cookie-Parameter auf "None" setzt. Füge dazu in deiner services.yml Datei folgendes hinzu:

parameters:
  session.storage.options:
    cookie_samesite: None

REST UI

Das REST UI Zusatzmodul ermöglicht die Konfiguration der Ressourcen des Core-REST-Moduls. So kannst du die Benutzerregistrierung mit diesem Modul aktivieren:

  1. Nach der Installation und Aktivierung des REST UI Moduls gehe zur Konfigurationsseite unter /admin/config/services/rest und aktiviere die "User registration" Ressource. Bearbeite die Ressource und aktiviere die POST-Methode, das JSON-Format und z.B. den Cookie-Provider. Durch Umschalten der Granularität auf "method" kannst du auch Formate und Provider pro Anfragemethode festlegen.
  2. Gewähre anonymen Benutzern die Berechtigung "Access POST on User registration resource" unter /admin/people/permissions/module/rest.
  3. Stelle sicher, dass Besucher ein Konto unter /admin/config/people/accounts anlegen können.

 

Artikel aus der Drupal Dokumentation.