Acceso denegado en Joomla, se ha obtenido un resultado desconocido
Se ha producido un error al autentificar.
Hace unos días, y tras una nueva instalación de XAMPP en el ordenador, recupero una copia de seguridad de un sitio web, la pongo en local con XAMPP y al iniciar sesión como administrador recibo el siguiente mensaje:
Advertencia
Se ha producido un error al autentificar: Se ha obtenido un resultado desconocido. Acceso denegado
Se me pasó por la cabeza que hubieran hackeado el sitio, así que fui en Internet a la URL de la web en cuestión, y pude entrar sin ningún problema. ¿Entonces? -Entonces pensé que tenía que ser algún problema en local y verás que la solución que encontré, no está comentada en ningún sitio y me hizo estrujarme las neuronas y perder ¡una tarde entera!
Creo que este es un interesante tutorial para que veas cómo poder solucionar errores desconocidos y entender el problema.
Lo primero que voy a hacer es averiguar...
...de dónde procede ese mensaje, así que con el programa Fileseek, hago una búsqueda de texto en todos los archivos de la web que contengan la anterior advertencia, y veo que el texto corresponde a:
JGLOBAL_AUTH_UNKNOWN_ACCESS_DENIED="Se ha obtenido un resultado desconocido. Acceso denegado"
Después hago otra búsqueda con esa etiqueta y veo que dicho error viene de este archivo:
C:\xampp\htdocs\mi-sitio-web\plugins\authentication\gmail\gmail.php
Y el código en el que salta el error es el siguiente:
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
switch ($code)
{
case 200:
$message = JText::_('JGLOBAL_AUTH_ACCESS_GRANTED');
$success = 1;
break;
case 401:
$message = JText::_('JGLOBAL_AUTH_ACCESS_DENIED');
break;
default:
$message = JText::_('JGLOBAL_AUTH_UNKNOWN_ACCESS_DENIED'); //<- Aquí salta el error
break;
}
Umm, ¡autentificación Gmail! ¡Qué raro! Lo primero que se me pasó por la mente es que en php.ini no estuviera activado cURL, pero entré en localhost y en phpinfo(), y observé que sí lo estaba. Además, en el código del archivo de gmail.php anterior, existe una condición que ha sido buena:
// Check if we have curl or not
if (function_exists('curl_init'))
Esto lo comento porque es posible que tú no tengas cURL activado. Debes activar cURL y también OpenSSL.
Encontrando de dónde proviene el error
Tampoco obtengo ningún error en el log de errores php:
C:\xampp\php\logs\php_error_log
¡Qué hacer! Pues sinceramente este fallo no está comentado en la red y me hizo perder bastante tiempo; la configuración para el registro de usuarios está con Gmail y está correcta, si deshabilito el plugin de autenticación Gmail desde la base de datos, el usuario y contraseña reales ¡no son válidos! ¿qué está pasando? -me pregunté bastante atónito.
Buscar la razón lógica de este comportamiento no fue sencillo. Depuré con Eclipse el código anterior sin entender por qué se intenta autentificar con Gmail y no lo hace con Joomla, así que cansado de no entenderlo (se entenderá al final), decidí deshabilitar el plugin de autentificación de Gmail desde phpMyAdmin, cambiando simplemente enabled = 0. Para hacer esto, entro en phpMyAdmin en mi base de datos > Tabla extensions > plg_authentication_gmail > y cambio enabled y lo dejo a cero 1:
Lo más raro de todo esto es que ahora, si intento iniciar sesión, Joomla! me dice: "El usuario y contraseña no coinciden o usted aún no tiene una cuenta". ¡No puede ser posible! Volví con Fileseek a averiguar de dónde procedía este nuevo error y era -lógicamente- de la autenticación de Joomla!
Entonces se me ocurrió que había algo corrupto en el backup del sitio web y finalmente, y para no aburrirte, descubrí que:
- La base de datos estaba actualizada a la versión 3.2.1 de Joomla!, mientras que
- Los archivos del sitio web estaban actualizados a la versión 3.2.0 de Joomla!
Ya lo entendí todo (por ejemplo, la encriptación de los passwords cambia de la versión 3.2.0 a 3.2.1), pero ¿por qué se produjo esto? -La respuesta más lógica que se me ocurre es que descargué del servidor un backup antiguo de los archivos. But... I don't know.
Solución
La solución fue descargar un nuevo backup de los archivos del sitio web. Espero que esto pueda ayudarte a no perder, como yo, una tarde entera buscando el error. ¡Buff!