En este post te mostraré cómo autenticar un usuario existente de WordPress desde un lugar externo; es decir, desde otro sistema, software, código o como le quieras llamar.

Dicho con otras palabras, te mostraré cómo hacer un login externo usando el usuario y contraseña de los usuarios de WordPress.

Por ejemplo, yo tengo un sistema en el que quiero autenticar a los usuarios con los que ya tengo en mi WordPress, así que quiero reutilizar esa tabla de usuarios y verificar si la contraseña y usuario coinciden, sin usar las funciones de WordPress.

Requisitos para leer base de datos de WordPress

Autenticar usuario de WordPress con PHP

Esto lo vamos a hacer con PHP, pero técnicamente hablando se podría hacer desde cualquier lenguaje de programación que pueda conectarse a MySQL y usar el algoritmo de hasheo de WP.

Para que funcione con PHP, el programa debe estar en el mismo servidor que el sitio de WordPress, y si no, al menos la base de datos debe estar disponible de manera remota.

Comprobar contraseña de WordPress

Esto es como hacer un login simple, lo que va a cambiar será el modo de comprobar si la contraseña es correcta, pues vamos a usar PasswordHash: Portable PHP password hashing framework.

Puedes descargarlo desde la página oficial, e incluirlo como mejor lo prefieras.

Obteniendo base de datos

En este caso usaré PDO para obtener una conexión a la base de datos. Recuerda cambiar las credenciales como sea necesario.

Como puedes ver es una simple conexión a la base de datos de MySQL de WordPress en donde están almacenados los usuarios.

Obtener usuario de WordPress

Ahora que tenemos la conexión, vamos a leer los datos. Los usuarios están en wp_users (me parece que puede cambiar si cambiaste el prefijo de las tablas, así que podría ser simplemente users) y sus roles (administrador, suscriptor, colaborador) están en wp_usermeta por lo que la consulta y la función quedan así:

En este caso el usuario puede autenticarse con el correo o con el nombre de usuario. La función regresará un objeto de usuario que tendrá todos los datos del mismo.

Aquí hay algo muy importante y es que el rol está dentro de meta_value pero este valor está serializado así que debemos usar unserialize y hacer un montón de comprobaciones para saber el rol.

Autenticar usuario

Ahora que ya tenemos esa función, veamos cómo autenticar. Lo que hacemos es:

  • Obtener el usuario de la base de datos de WordPress
  • Incluir a PasswordHash para comprobar la contraseña
  • Si todo es correcto, volvemos a regresar al usuario, con el rol ya arreglado
  • Si algo falla (la contraseña no es correcta, no existe el usuario, etcétera) regresamos false

Entonces queda así:

La función recibe el nombre de usuario o correo, y la contraseña plana. Obtiene el usuario, comprueba los datos y en caso de que todo vaya bien, regresará el usuario.

Si la contraseña no coincide o el usuario no existe, regresa false. A partir de la llamada de esta función podríamos iniciar sesión, pues si nos regresa un usuario podemos iniciar y establecer datos en la sesión.

A continuación te mostraré un ejemplo de uso de la función.

Poniendo todo junto

También he grabado un vídeo explicando el código, te invito a verlo y a que te suscribas:

Veamos el ejemplo completo, a continuación el código. Recuerda que la clase PasswordHash.php debe estar en el mismo directorio que este código.

Igualmente dejo el código completo en mi GitHub. No olvides cambiar las credenciales de la base de datos. Aquí puedes leer más artículos de WordPress.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 3,477 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

2 Comentarios

Rotty · abril 16, 2021 a las 5:03 pm

Buen post! Estoy tratando de hacer login con un usuario de WordPress en un php externo, como el que has puesto. El caso es que, he probado lo que mencionas y nos muestras en el post pero no me funciona (he cambiado el usuario + passwd evidentemente). La salida de la web es esta:

Debería mostrar los datos correctos: false
Ahora debería mostrar false: false

El login me funciona correctamente en el WordPress..se te ocurre que puede ocurrir?

Saludos!

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: