Informationen zur Anmeldung über die REST-API

7

Ich habe diesen Artikel gelesen . Ich möchte wissen, wie die Anmeldung mit der REST-API in Drupal 8 funktioniert. Wenn sich Benutzer anmelden, überprüft Drupal standardmäßig den Benutzernamen und das Kennwort. Nach der Anmeldung hat der Browser ein Cookie für die erstellte Sitzung.

Geben Sie hier die Bildbeschreibung ein

Wie kann Drupal 8 mit der REST-API Benutzer beim ersten Anmelden überprüfen? Wie wird nach dem Login das aktuelle Login überprüft?

Jonh
quelle
1
Genau so - es gibt Ihnen Token, wenn Sie sich anmelden / ein CSRF-Token anfordern, dann senden Sie Cookies / Header zusammen mit nachfolgenden Anforderungen, die diese Werte enthalten
Clive
Danke für die Hilfe. Ich bin Neuling, kann mir also mehr Details helfen. Wie kann man ein CSRF-Token erhalten, ein CSRF-Token an den Server senden?
Jonh
John, brauchst du weitere Informationen oder eine Klarstellung meiner Antwort unten? Gerne verbessere ich es bei Bedarf.
unrein
Warum wurde der Titel der Frage geändert, um "REST API" zu entfernen? Die Frage bezieht sich speziell auf die REST-API.
unrein
@imclean Der Fragentitel muss nicht alle Details enthalten, was praktisch unmöglich ist. Dann brauchen wir keine Tags, die auch im Titel gemeldet werden.
Kiamlaluno

Antworten:

12

Melden Sie sich bei Drupal an, indem Sie die Benutzeranmeldeinformationen POSTEN. Stellen Sie sicher, dass Sie den Header "Content-Type" setzen. Dies startet die Sitzung des Benutzers.

POST-URL:

/user/login?_format=json

Header:

Content-Type: application/json

Post-Daten:

{
  "name": "username",
  "pass": "password"
}

Erfolgreiche Antwort:

{
  "current_user":{
    "uid": "1",
    "roles":[
      "authenticated",
      "administrator"
    ],
    "name": "username"
  },
  "csrf_token":   "asda09820380_2238019280dk09n908asjdlkajdaoa",
  "logout_token": "asdasd09a8sdaslkdasl-asdasdklsajdlkasdjlksj"
}

Verwenden Sie das CSRF-Token in nachfolgenden GET-, POST-, PATCH-, DELETE- usw. Anforderungen, indem Sie den Header festlegen:

X-CSRF-Token: asda09820380_2238019280dk09n908asjdlkajdaoa

Verwenden Sie zum Abmelden das Abmeldetoken in einer POST-Anforderung. Dies beendet die Sitzung des Benutzers.

/user/logout?_format=json&token=asdasd09a8sdaslkdasl-asdasdklsajdlkasdjlksj

Anmeldestatus erhalten:

/user/login_status?_format=json

Bekomme Token:

/rest/session/token

Verweise:

ich bin sauber
quelle
Das ist gut. Ist aber für den Neuling schwierig. Können Sie weitere Informationen zum Login mit dem Postboten erhalten? In der Tabellensitzung gespeicherte Sitzung hat Anmeldung. Und Login beendet. Sie können sich nicht erneut anmelden und jede Antwort zurückgeben.
Jonh
Postbote könnte eine separate Frage sein. Auf den ersten Blick wird der Verlauf von Anfragen und Antworten jedoch nicht automatisch gespeichert, sodass Sie jedes Mal manuell auf "Speichern" klicken müssen. Ich benutze Restlet Client . Stellen Sie in Postman sicher, dass Sie nur den Header "Content-Type" hinzufügen und für den Body-Typ auf "raw" klicken. Sie müssen jede Antwort "speichern", damit Sie die Token wieder verwenden können. Drupal-Sitzungen werden wie gewohnt verwaltet. Auf der Clientseite müssen Sie die Token für die Sitzung manuell verwalten.
unrein
Mit REST werden keine Cookies gesetzt, es sei denn, Ihre App setzt sie. Verwenden Sie stattdessen die Token.
unrein
@Jonh Es sieht so aus, als ob Postman das Speichern von REST-Antworten nicht unterstützt. Ich empfehle daher, den Restlet-Client zu verwenden. Siehe: Speichern Sie Antworten in Verlauf und Sammlungen
unrein
1
Ich habe ein Problem gefunden. Tabellensitzungen : Die Sitzungshandler von Drupal lesen und schreiben in die Sitzungstabelle. Jeder Datensatz repräsentiert eine Benutzersitzung, entweder anonym oder authentifiziert. Controller / Rest / Session / Token geben immer einen Wert zurück (jeder anonyme oder authentifizierte Benutzer). Wenn Sie also ein Token erhalten, müssen Sie sich zuerst mit dem Benutzer anmelden. When / user / login_status? _Format = json Rückgabewert 1. Sie können sich nicht erneut anmelden, um ein Token zu erhalten. Sie müssen sich abmelden. Wenn Sie sich nicht abmelden können. Sie können Tabellensitzungen leeren.
Jonh
1

Drupal Core-Version: 8.x-4.x

Sie müssen als Erstes den Benutzeranmeldedienst aktivieren. Dies kann auf so viele Arten erfolgen, dass ich lieber das REST-UI- Modul verwende.

Gehen Sie zu / admin / config / services / rest und aktivieren Sie die Ressource User Rest.

Einmal aktiviert werden, damit Sie können gehen zu / admin / config / services / rest / resource / Einheit% 3Auser / bearbeiten , indem Sie auf klicken Bearbeiten neben dem Benutzer Ressource. Stellen Sie sicher, dass die GET- Methode aktiviert ist .

Geben Sie hier die Bildbeschreibung ein

Jetzt haben Sie alles Setup können Sie , indem Sie diesen Befehl im Terminal mit dem Dienst starten oder durch einen Antrag auf curl Anfragen unter Verwendung von wie: Postman und Restlet Kunden.

HINWEIS : CSRF-Token erhalten Sie unter: / rest / session / token

curl -i -L -X POST \
  -H "Content-Type:application/json" \
  -H "Accept:application/json" \
  -H "X-CSRF-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  -d \
     '{
       "name": "my_username",
       "pass": "my_password"
     }' \
'http://SITE-URL/user/login?_format=json'

Die Rückgabeobjekte sind wie folgt:

ERFOLG :

{
  "current_user": {
  "uid": "1",
    "roles": [
      "authenticated"
    ],
    "name": "Admin"
  },
  "csrf_token": "bbbbbbbbbbbbbbbbbbbbbbbbbb",
  "logout_token": "ccccccccccccccccccccccccc"
}

FEHLER :

{
  "message":"Sorry, unrecognized username or password."
}
Mohammad AlQanneh
quelle