Estoy trabajando en una aplicación ajax que se incrustará en una página de wordpress. La aplicación ajax intercambia datos con servlets que se ejecutan en tomcat. Ahora los servlets necesitan una forma de determinar si una solicitud proviene de un usuario que ha iniciado sesión en WordPress. Y si el usuario ha iniciado sesión, los servlets también deben poder determinar la identificación de los usuarios para poder consultar la base de datos. Si el usuario no está registrado, la solicitud será denegada.
En otras palabras, necesito dejar que un servlet realice una solicitud solo si el usuario que causó la solicitud ha iniciado sesión en wordpress (versión 3.3.x). Tanto el servlet (tomcat) como wordpress (apache2) se ejecutan en la misma máquina física y comparten la misma base de datos.
En teoría, esto podría resolverse fácilmente haciendo lo siguiente:
- Durante el inicio de sesión de WordPress, algunos tokens de usuario se almacenan en una variable de JavaScript.
- La aplicación ajax reenvía el token de usuario a los servlets en cada llamada.
- Los servlets usan el token para consultar wordpress si es válido (es decir, si el usuario ha iniciado sesión) y realizar o rechazar la solicitud.
La pregunta es cómo se puede implementar esto en el lado de WordPress.
Porque, lo que hace que la teoría sea tan complicada es el hecho de que todavía no he hecho ninguna programación php.
Primero estaba pensando en transmitir la cookie wordpress_logged_in (auth) al servlet y dejar que el servlet consulte wordpress si la cookie de autenticación sigue siendo válida. Pero como parece, esto no se puede hacer, ya que wp_validate_auth_cookie () siempre falla, incluso si se pasan los datos de cookies de un usuario conectado. Otra solución podría ser desarrollar un complemento que almacene el ID de sesión y el ID de usuario en una tabla, que los servlets podrían consultar fácilmente. O tal vez hay otra solución ...
fuente
Respuestas:
WordPress ya tiene una API integrada a través de un servidor XMLRPC. Es decir, puede realizar una solicitud XMLRPC desde su aplicación Java y verificar un nombre de usuario / contraseña. Desafortunadamente, no hay forma de autenticarse a través de él tal como está.
Dicho esto, es muy fácil rodar el tuyo. Simplemente enganche
xmlrpc_methods
un filtro y agregue el suyo. La clave de matriz que agregue será el método xmlrpc que llame desde su aplicación, y el valor será la función que llama el servidor XMLRPC de WordPress.Y la función de devolución de llamada
wpse39662_check_login
, le pasaría un argumento, la matriz de cosas enviadas al servidor XMLRPC.Aquí está todo eso como un complemento . Con eso instalado y XMLRPC habilitado en su sitio WP, debería poder hacer solicitudes con algún cliente XMLRPC (estoy seguro de que Java tiene uno).
Aquí está el código que usé para probar lo anterior (cliente Python XMLRPC).
fuente
Wordpress (actualmente) verifica si el usuario aún está conectado al verificar una de las cookies que entrega al iniciar sesión. Construye el contenido de esta cookie haciendo algo de hashing. Los detalles se encuentran en la función "wp_generate_auth_cookie" en /wp-includes/pluggable.php:
Puede volver a crear este algoritmo (usando esta y las otras funciones auth_cookie) en su código Java para hacer las mismas verificaciones. JS podría usarse para asegurarse de que la cookie se envíe a su servlet.
De lo contrario, XMLRPC podría ser una buena idea. Podría escribir un nuevo método (como se explica en otra solución aquí) para validar la cookie de autenticación (en lugar de validar el nombre de usuario y la contraseña como se hace generalmente).
fuente
Obtenga el complemento Exec-PHP , y luego cree una página de WordPress (no una publicación) con un buen enlace permanente (
http://mysite/user_id/
) y el código en laget_current_user_id()
referencia de la API :Luego puede extraer las cookies que el cliente le envía y ponerlas en una
GET
solicitudhttp://127.0.0.1/user_id/
. Entonces sabrá si el usuario ha iniciado sesión y cuál es su ID de usuario.fuente
Podrías hacer algo como esto en las páginas que no son de wp:
fuente
Este es un complemento de WordPress de un archivo que hace el trabajo:
Básicamente expone un nuevo método XML-RPC con el que puede pedirle a WordPress que valide la
wordpress_logged_in_...
cookie.Luego debe escribir un código para consultar este método y pasarle el valor de la
wordpress_logged_in_...
cookie.Este método devolverá
false
(si la cookie no se valida) o la ID de usuario si la validación es exitosa.fuente