Ich arbeite an einer Ajax-Anwendung, die in eine WordPress-Seite eingebettet wird. Die Ajax-App tauscht Daten mit Servlets aus, die auf Tomcat ausgeführt werden. Jetzt benötigen die Servlets eine Möglichkeit, um festzustellen, ob eine Anforderung von einem Benutzer stammt, der bei WordPress angemeldet ist. Wenn der Benutzer angemeldet ist, müssen die Servlets auch die Benutzer-ID ermitteln können, um die Datenbank abfragen zu können. Wenn der Benutzer nicht angemeldet ist, wird die Anforderung abgelehnt.
Mit anderen Worten, ich muss ein Servlet nur dann eine Anforderung ausführen lassen, wenn der Benutzer, der die Anforderung verursacht hat, bei WordPress (Version 3.3.x) angemeldet ist. Sowohl das Servlet (Tomcat) als auch WordPress (Apache2) werden auf demselben physischen Computer ausgeführt und verwenden dieselbe Datenbank.
Theoretisch könnte dies leicht durch Folgendes gelöst werden:
- Während der WordPress-Anmeldung wird ein Benutzertoken in einer Javascript-Variablen gespeichert.
- Die Ajax-App leitet das Benutzertoken bei jedem Aufruf an die Servlets weiter.
- Die Servlets verwenden das Token, um WordPress abzufragen, ob es gültig ist (dh wenn der Benutzer angemeldet ist) und die Anforderung auszuführen oder abzulehnen.
Die Frage ist, wie dies auf der WordPress-Seite umgesetzt werden kann.
Denn was die Theorie so kompliziert macht, ist die Tatsache, dass ich noch keine PHP-Programmierung durchgeführt habe.
Zuerst dachte ich daran, das Cookie wordpress_logged_in (auth) an das Servlet zu übertragen und das Servlet WordPress abfragen zu lassen, wenn das Cookie auth noch gültig ist. Dies scheint jedoch nicht möglich zu sein, da wp_validate_auth_cookie () immer fehlschlägt, selbst wenn Cookie-Daten eines angemeldeten Benutzers übergeben werden. Eine andere Lösung könnte darin bestehen, ein Plugin zu entwickeln, das die Sitzungs- und Benutzer-ID in einer Tabelle speichert, die von den Servlets leicht abgefragt werden kann. Oder vielleicht gibt es eine andere Lösung ...
quelle
Antworten:
In WordPress ist bereits eine API über einen XMLRPC-Server integriert. Das heißt, Sie können eine XMLRPC-Anfrage von Ihrer Java-App aus stellen und einen Benutzernamen / ein Passwort überprüfen. Leider gibt es keine Möglichkeit, sich einfach so zu authentifizieren, wie es ist.
Das heißt, es ist sehr einfach, Ihre eigenen zu rollen. Schließen Sie einfach
xmlrpc_methods
einen Filter an und fügen Sie Ihren hinzu. Der Array-Schlüssel, den Sie hinzufügen, ist die xmlrpc-Methode, die Sie von Ihrer App aus aufrufen, und der Wert ist die Funktion, die vom WordPress-XMLRPC-Server aufgerufen wird.Und die Rückruffunktion
wpse39662_check_login
würde ein Argument erhalten, das Array von Dingen, die an den XMLRPC-Server gesendet werden.Hier ist alles als Plugin . Wenn dies installiert und XMLRPC auf Ihrer WP-Site aktiviert ist, sollten Sie in der Lage sein, Anforderungen mit einem XMLRPC-Client zu stellen (ich bin sicher, Java hat einen).
Hier ist der Code, mit dem ich das Obige getestet habe (Python XMLRPC-Client).
quelle
Wordpress überprüft (derzeit), ob der Benutzer noch angemeldet ist, indem es eines der Cookies überprüft, die es beim Anmelden ausgibt. Der Inhalt dieses Cookies wird durch Hashing erstellt. Die Details finden Sie in der Funktion "wp_generate_auth_cookie" in /wp-includes/pluggable.php:
Sie können diesen Algorithmus (mit dieser und den anderen auth_cookie-Funktionen) in Ihrem Java-Code neu erstellen, um dieselben Überprüfungen durchzuführen. JS kann verwendet werden, um sicherzustellen, dass das Cookie an Ihr Servlet gesendet wird.
Andernfalls ist XMLRPC möglicherweise eine gute Idee. Sie können eine neue Methode schreiben (wie in einer anderen Lösung hier erläutert), um das Auth-Cookie zu validieren (anstatt Benutzername und Passwort zu validieren, wie dies normalerweise der Fall ist).
quelle
Holen Sie sich das Exec-PHP-Plugin
http://mysite/user_id/
und erstellen Sie eine WordPress-Seite (kein Beitrag) mit einem schönen Permalink ( ) und dem Code in derget_current_user_id()
API-Referenz :Sie können dann die Cookies extrahieren, die der Kunde Ihnen sendet, und sie in eine
GET
Anfrage für stellenhttp://127.0.0.1/user_id/
. Dann wissen Sie, ob der Benutzer angemeldet ist und wie seine Benutzer-ID lautet.quelle
Auf den Nicht-WP-Seiten können Sie so etwas tun:
quelle
Dies ist ein WordPress-Plugin mit einer Datei, das die Aufgabe erledigt:
Grundsätzlich wird eine neue XML-RPC-Methode verfügbar gemacht, mit der Sie WordPress bitten können, das
wordpress_logged_in_...
Cookie zu validieren .Sie müssen dann Code schreiben, um diese Methode abzufragen und den Wert des
wordpress_logged_in_...
Cookies zu übergeben.Diese Methode gibt entweder
false
(wenn das Cookie nicht validiert wird) oder die Benutzer-ID zurück, wenn die Validierung erfolgreich ist.quelle