Je travaille sur une application ajax qui sera intégrée dans une page wordpress. L'application ajax échange des données avec des servlets fonctionnant sur tomcat. Désormais, les servlets ont besoin d'un moyen de déterminer si une demande provient d'un utilisateur connecté à wordpress. Et si l'utilisateur est connecté, les servlets doivent également pouvoir déterminer l'ID des utilisateurs afin de pouvoir interroger la base de données. Si l'utilisateur n'est pas connecté, la demande sera refusée.
En d'autres termes, je dois autoriser une servlet à exécuter une requête uniquement si l'utilisateur à l'origine de la requête est connecté à wordpress (version 3.3.x). Le servlet (tomcat) et wordpress (apache2) s'exécutent sur la même machine physique et partagent la même base de données.
En théorie, cela pourrait facilement être résolu en procédant comme suit:
- Lors de la connexion wordpress, certains jetons utilisateur sont stockés dans une variable javascript.
- L'application ajax transfère le jeton utilisateur aux servlets à chaque appel.
- Les servlets utilisent le jeton pour interroger wordpress s'il est valide (c'est-à-dire si l'utilisateur est connecté) et exécuter ou refuser la demande.
La question est de savoir comment cela peut être mis en œuvre du côté wordpress?
Parce que, ce qui rend la théorie si compliquée, c'est le fait que je n'ai pas encore fait de programmation php.
Je pensais d'abord à transmettre le cookie wordpress_logged_in (auth) au servlet et laisser le servlet interroger wordpress si le cookie d'authentification est toujours valide. Mais il semble que cela ne puisse pas être fait, car wp_validate_auth_cookie () échoue toujours, même si les données de cookie d'un utilisateur connecté sont transmises. Une autre solution pourrait être de développer un plugin qui stocke l'ID session et l'ID utilisateur dans une table, qui pourrait facilement être interrogée par les servlets. Ou peut-être qu'il y a une autre solution ...
la source
Réponses:
WordPress possède déjà une API intégrée via un serveur XMLRPC. Cela signifie que vous pouvez faire une demande XMLRPC à partir de votre application java et vérifier un nom d'utilisateur / mot de passe. Malheureusement, il n'y a aucun moyen de s'authentifier tel quel.
Cela dit, il est très facile de rouler le vôtre. Accrochez-vous simplement à
xmlrpc_methods
un filtre et ajoutez le vôtre. La clé de tableau que vous ajoutez est la méthode xmlrpc que vous appelez à partir de votre application, et la valeur sera la fonction qui sera appelée par le serveur WordPress XMLRPC.Et la fonction de rappel
wpse39662_check_login
,, recevrait un argument, le tableau de choses envoyé au serveur XMLRPC.Voici tout cela en tant que plugin . Avec cela installé et XMLRPC activé sur votre site WP, vous devriez pouvoir faire des demandes avec un client XMLRPC (je suis sûr que Java en a un).
Voici le code que j'ai utilisé pour tester ce qui précède (client Python XMLRPC).
la source
Wordpress vérifie (actuellement) si l'utilisateur est toujours connecté en vérifiant l'un des cookies qu'il donne lors de la connexion. Il construit le contenu de ce cookie en faisant du hachage. Les détails se trouvent dans la fonction "wp_generate_auth_cookie" dans /wp-includes/pluggable.php:
Vous pouvez recréer cet algorithme (en utilisant celui-ci et les autres fonctions auth_cookie) dans votre code Java pour effectuer les mêmes vérifications. JS pourrait être utilisé pour s'assurer que le cookie est envoyé à votre servlet.
Sinon, XMLRPC pourrait être une bonne idée. Vous pouvez écrire une nouvelle méthode (comme expliqué dans une autre solution ici) pour valider le cookie d'authentification (au lieu de valider le nom d'utilisateur et le mot de passe comme cela se fait généralement).
la source
Obtenez le plugin Exec-PHP , puis créez une page WordPress (pas un article) avec un joli permalien (
http://mysite/user_id/
) et le code sur laget_current_user_id()
référence de l' API :Vous pouvez ensuite extraire les cookies que le client vous envoie et les envoyer dans une
GET
demandehttp://127.0.0.1/user_id/
. Vous saurez alors si l'utilisateur est connecté et quel est son ID utilisateur.la source
Vous pouvez faire quelque chose comme ça sur les pages non-wp:
la source
Ceci est un plugin WordPress à un fichier qui fait le travail:
Il expose essentiellement une nouvelle méthode XML-RPC avec laquelle vous pouvez demander à WordPress de valider le
wordpress_logged_in_...
cookie.Vous devez ensuite écrire du code pour interroger cette méthode et lui transmettre la valeur du
wordpress_logged_in_...
cookie.Cette méthode renvoie soit
false
(si le cookie ne valide pas) ou l'ID utilisateur si la validation réussit.la source