php

Autenticar usuario con base de datos de WordPress

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.

See the gist on github.

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í:

See the gist on github.

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í:

See the gist on github.

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.

See the gist on github.

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.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
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/

Ver comentarios

  • 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!

Entradas recientes

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

4 días hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

4 días hace

Imprimir PDF generado con HTML

Hoy vamos a ver programar la impresión de un PDF generado a partir de HTML…

6 días hace

JavaScript: llenar select con arreglo

En este tutorial básico de JavaScript con HTML vamos a ver cómo llenar una lista…

2 semanas hace

Imprimir PDF a partir de URL

En este artículo se presenta una guía para imprimir un PDF a partir de una…

2 semanas hace

Imprimir PDF a partir de base64

En este post voy a enseñarte cómo imprimir un PDF a partir de su representación…

2 semanas hace

Esta web usa cookies.