Hat jemand ein funktionierendes REST-Login für Drupal 8?
Das habe ich versucht.
POST /user/login HTTP/1.1
Host: 8.d8.local
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: http://nikhilmohan.in
Cache-Control: no-cache
name=test&pass=password&form_id=user_login_form
Es gibt mir HTML anstelle von JSON zurück .
So können Sie sich über JavaScript für Drupal 8 REST anmelden:
Drupal 8.2 und höher
http://example.com/user/login?_format=json
application/json
{ "name": "admin", "pass": "myPassword" }
200 OK
Dies wird sich ordnungsgemäß über die Cookie-Authentifizierung anmelden und ein Ergebnis ähnlich dem folgenden zurückgeben:
Ich habe ein Contrib-Modul mit dem Namen jDrupal erstellt , mit dem Sie sich (unter anderem) ganz einfach mit JavaScript anmelden können:
Vor Drupal 8.2
http://example.com/user/login
application/x-www-form-urlencoded
name=admin&pass=myPassword&form_id=user_login_form
200 OK | 303 See Other
Sie senden die Daten in der URL als Abfragezeichenfolge. Das Ergebnis ist HTML, sodass es Ihnen nichts Nützliches zurückgibt, sich jedoch ordnungsgemäß über die Cookie-Authentifizierung anmeldet.
quelle
RESTful-Authentifizierung bedeutet, dass bei jeder Anforderung eine Authentifizierung gesendet wird, da diese statusfrei ist. Das von Drupal 8 Core bereitgestellte Beispiel ist das Basic Auth-Modul, mit dem Authentifizierungsdaten für eine HTTP-Anforderung über die Basic HTTP-Authentifizierung gesendet werden können, wenn ein Benutzer die Berechtigung hat, über GET auf Inhalte zuzugreifen.
RESTvolles Beispiel
Locke:
curl -vvv -k -H "Authorization: Basic test:password" http://8.d8.local/node/1?_format=json
Dies ist jedoch in der Regel nicht gut genug. Das simple_oauth und oauth Module contrib bieten OAuth 2 bzw. 1-Unterstützung, mit denen eine HTTP-Anforderung mit OAuth-Authentifizierungstoken basierend auf den in diesen Modulen beschriebenen OAuth-Arbeitsabläufen durchgeführt werden kann.
Aber die eigentliche Frage scheint zu sein
Wie melde ich mich über eine Web Services-API an?
Dafür gibt es kein stabiles Drupal 8-Modul, sondern die Dienste Modul bietet Methoden zum Erstellen von nicht-REST-fähigen Aktionen und gezielten Aktionen wie "Login".
Nach dem Einrichten eines Endpunkts mit dem Namen "api" funktioniert Folgendes:
Locke:
curl -vvv -k -H "Content-Type: application/json" -H "Accept: application/json" -d '{"username": "test", "password": "password"}' http://8.d8.local/api/user/login
Dies gibt die ID und den Namen der JSON-Sitzung zurück (auch im Set-Cookie-Header der Antwort festgelegt).
und Sie können sich auch mit Jquery Ajax Call mit folgendem Snippet anmelden
quelle
Drupal Core-Version: 8.x-4.x
Sie müssen als Erstes den Benutzeranmeldedienst aktivieren. Dies kann auf so viele Arten erfolgen, dass ich die Verwendung des REST-UI- Moduls bevorzuge .
Gehen Sie zu / admin / config / services / rest und aktivieren Sie die Ressource User Rest.
Sobald es aktiviert ist, können Sie zu / admin / config / services / rest / resource / entity% 3Auser / edit gehen, indem Sie neben der Benutzerressource auf Edit klicken . Stellen Sie sicher, dass die GET- Methode aktiviert ist .
Nachdem Sie alle Einstellungen vorgenommen haben, können Sie den Dienst verwenden, indem Sie diesen Befehl im Terminal ausführen oder eine beliebige Anwendung für Curl-Anforderungen verwenden, z. B . : Postbote und Restlet Kunden.
HINWEIS : CSRF-Token erhalten Sie unter: / rest / session / token
Die Rückgabeobjekte sind wie folgt:
ERFOLG :
FEHLER :
quelle
Ich benutze benutzerdefinierte RESTFul Login auf Drupal 8, aber nicht mit Cookie. Es ist für eine mobile App und jedes Mal, wenn ich Informationen benötige, verwende ich eine einfache Authentifizierung:
Seit Drupal 8.2x benötigen wir 2 Dateien in einem Modul:
Sie können weitere Methoden wie DELETE / POST hinzufügen
Dann brauchen wir die Datei
Vergiss nicht, zum Benutzerrecht zu gehen, um die Methode GET / POST oder etwas anderes zu akzeptieren, das du in deiner Konfiguration hinzugefügt hast.
Damit können Sie jede benutzerdefinierte REST-Datei für jede benutzerdefinierte Entität erstellen.
Und in meinem js: Vergiss nicht anzurufen
für get token
quelle
Wenn Sie nach der Antwort von @ tyler.frankenstein ein Anmeldeformular mit Ajax implementieren möchten, können Sie beispielsweise jQuery verwenden.
1. Holen Sie sich ein CSRF-Token
Wir müssen eine POST-Anfrage an die senden
user/login
Endpunkt der Drupal 8-API senden. Für diesen Endpunkt (als "nicht sichere Methode" betrachtet) müssen Sie ein CSRF-Token senden.Der erste Schritt besteht darin, dieses Token durch Senden einer AJAX-Anforderung an den
rest/session/token
Endpunkt abzurufen:NB:
callback
Parameter ist eine Rückruffunktion, die aufgerufen wird, wenn das CSRF-Token abgerufen wirdDrupal.url
Funktion, um die Basis-URL der Site zu erhaltenDieses Token sollte mit einem
X-CSRF-Token
Header gesendet werden.2. Login
Betrachten Sie das folgende HTML:
... und den entsprechenden jQuery-Code:
Dieser Code wurde erfolgreich mit Drupal 8.3 getestet.
Ich hoffe, dies wird dir helfen!
quelle
Ja klar, ich habe ein Blog darüber erstellt, wie man es mit dem Postboten testet , und ein weiteres, wie man seine Drupal-Site konfiguriert .
In diesem Projekt habe ich mich für Drupal mit Angular mit dem Simple OAuth-Modul für das Token angemeldet.
quelle