¿Cómo recuperar una contraseña de superadministrador olvidada en PrestaShop? 🔐
Hay olvidos inocentes: dónde quedaron las llaves, qué día era la reunión, por qué entramos a la cocina. Y luego está ese otro olvido, más teatral, más cruel: la contraseña del superadministrador de PrestaShop. Una tienda funcionando, clientes navegando, pedidos entrando quizá, y usted fuera del Back Office como un rey mirando su castillo desde el foso. La ironía es fina: el usuario con más permisos es, de pronto, el que menos puede hacer.
Recuperar una contraseña de superadministrador en PrestaShop no tiene por qué convertirse en una operación de cirugía mayor. Pero tampoco conviene hacerlo con la ligereza de quien cambia una bombilla. Estamos hablando del acceso principal a una tienda online: productos, pedidos, clientes, módulos, métodos de pago, datos personales y, en muchos casos, dinero real circulando como agua subterránea bajo el suelo.
Esta guía explica, con enfoque profesional, cómo recuperar el acceso al panel de administración de PrestaShop cuando se ha olvidado la contraseña del superadministrador. Veremos el método normal mediante correo electrónico, la recuperación desde base de datos, el uso de un script PHP seguro, las diferencias entre versiones antiguas y modernas, y las comprobaciones posteriores para no cerrar la puerta dejando una ventana abierta. 🛠️
Antes de tocar nada: esta guía está pensada para propietarios legítimos, administradores de sistemas, desarrolladores y responsables técnicos de una tienda PrestaShop. Si no tiene autorización sobre la instalación, no continúe. En seguridad web, la frontera entre mantenimiento y abuso no es una línea borrosa: es una puerta con nombre y apellido.
Contenido de la guía
- Qué significa ser superadministrador en PrestaShop
- Método 1: recuperar la contraseña desde el Back Office
- Qué hacer si el correo de recuperación no llega
- Método 2: recuperar acceso desde la base de datos
- Método 3: restablecer la contraseña con un script PHP seguro
- Método 4: actualización SQL en instalaciones antiguas
- Consideraciones en PrestaShop multitienda
- Errores frecuentes y cómo resolverlos
- Qué hacer después de recuperar el acceso
Qué significa ser superadministrador en PrestaShop 👤
En PrestaShop, el superadministrador no es una criatura mística escondida en una cueva digital. Es, técnicamente, un empleado registrado en la tabla de empleados de la base de datos, normalmente ps_employee, asociado a un perfil con permisos máximos. En muchas instalaciones ese perfil se llama SuperAdmin y suele tener el identificador id_profile = 1, aunque no conviene apostar la tienda a un “suele”.
La diferencia entre un empleado común y un superadministrador es la diferencia entre una llave de habitación y una llave maestra. Uno puede gestionar pedidos o productos; el otro puede cambiar configuraciones críticas, instalar módulos, tocar métodos de pago, modificar permisos, acceder a datos sensibles y, si se equivoca con entusiasmo, derribar media tienda. Poder y fragilidad, juntos. Como un jarrón caro en manos de alguien con prisa.
Las credenciales de los empleados se almacenan en la base de datos, pero la contraseña no debería guardarse nunca en texto plano. PrestaShop utiliza hashes de contraseña. En versiones antiguas se empleaban mecanismos más simples, históricamente asociados a _COOKIE_KEY_ y funciones como MD5. En versiones más recientes, PrestaShop ha ido adoptando sistemas de hashing más robustos y compatibles con políticas de seguridad modernas. Por eso un consejo repetido en foros desde hace diez años puede ser hoy una receta peligrosa o, como mínimo, inútil.
| Elemento | Función | Dónde suele encontrarse |
|---|---|---|
ps_employee |
Tabla que almacena usuarios del Back Office: email, contraseña cifrada, estado activo, perfil, etc. | Base de datos de PrestaShop. El prefijo puede no ser ps_. |
id_profile |
Define el perfil de permisos del empleado. | Tabla ps_employee y tablas relacionadas con perfiles. |
_COOKIE_KEY_ |
Clave interna usada por PrestaShop en distintos procesos criptográficos, especialmente en instalaciones antiguas. | app/config/parameters.php en PrestaShop 1.7/8 o config/settings.inc.php en versiones antiguas. |
| Back Office | Panel de administración de la tienda. | Carpeta de administración, normalmente renombrada por seguridad. |
Método 1: recuperar la contraseña desde el Back Office 📩
Empecemos por lo sensato. Antes de abrir phpMyAdmin como quien abre una caja fuerte con un destornillador, pruebe el sistema de recuperación integrado.
- Acceda a la URL de administración de su tienda PrestaShop. Suele ser algo como
https://tudominio.com/adminXXXX/, porque PrestaShop recomienda renombrar la carpeta de administración. - Haga clic en “He olvidado mi contraseña” o una opción similar.
- Introduzca el correo electrónico asociado al usuario superadministrador.
- Revise la bandeja de entrada y también la carpeta de spam.
- Siga el enlace recibido y cree una nueva contraseña segura.
Este método es el más limpio porque respeta el flujo interno de PrestaShop: genera el token adecuado, valida el tiempo de expiración, aplica las reglas de contraseña y actualiza el hash como corresponde. Es el equivalente digital de entrar por la puerta principal, con la llave correcta y sin despertar al perro.
Si no recuerda la URL del Back Office
En PrestaShop, la carpeta de administración suele renombrarse durante la instalación. Puede llamarse admin123xyz, admin-dev, gestor-tienda o cualquier otra combinación. Para localizarla:
- Revise los archivos del servidor mediante FTP, SFTP o el administrador de archivos del hosting.
- Busque una carpeta cuyo nombre empiece por
admino que contenga archivos comoindex.phpy subcarpetas propias del panel. - Si usa control de versiones o documentación interna, revise notas de despliegue. Sí, esa documentación que todos prometimos mantener al día y que a veces envejece como yogur al sol.
Qué hacer si el correo de recuperación no llega ✉️
Si el correo de recuperación no llega, no significa necesariamente que la contraseña sea irrecuperable. A menudo el problema no está en el usuario, sino en el sistema de envío de correos. PrestaShop puede fallar al enviar emails por una mala configuración SMTP, bloqueo del hosting, registros SPF/DKIM ausentes, límites del servidor o cambios recientes en la cuenta de correo.
Compruebe lo siguiente:
- Carpeta de spam: básico, sí; sorprendentemente efectivo, también.
- Correo correcto: asegúrese de que está usando el email asociado al empleado administrador.
- Configuración SMTP: si tiene acceso a archivos o base de datos, revise si la tienda usa SMTP personalizado.
- Logs del servidor: algunos hostings registran errores de envío en paneles como cPanel, Plesk o registros de PHP.
- Bloqueos del proveedor: en servidores compartidos, el envío mediante
mail()puede estar limitado o deshabilitado.
Si no puede recibir el correo, puede cambiar temporalmente el email del empleado desde la base de datos y luego usar el sistema de recuperación normal. Es una solución elegante cuando se hace con cuidado: se cambia el buzón, se pide el enlace, se restablece la contraseña y después se deja todo documentado.
Método 2: recuperar acceso desde la base de datos 🗄️
Cuando el correo no funciona y el acceso al Back Office está cerrado, la base de datos se convierte en el pasillo de servicio. No es tan vistoso como la entrada principal, pero permite llegar al mismo edificio. Eso sí: aquí conviene caminar despacio.
Advertencia importante: antes de modificar la base de datos, haga una copia de seguridad completa. Exporte la base de datos desde phpMyAdmin, Adminer, el panel del hosting o mediante línea de comandos. Una consulta mal escrita puede ser tan destructiva como una tormenta en una biblioteca.
1. Identifique el prefijo real de las tablas
Muchos tutoriales hablan de ps_employee, pero el prefijo puede ser distinto. Durante la instalación, PrestaShop permite cambiarlo. Puede encontrarlo en:
- PrestaShop 1.7, 8 y posteriores: normalmente en
app/config/parameters.php, dentro del valordatabase_prefix. - PrestaShop 1.6 y anteriores: normalmente en
config/settings.inc.php, definido como_DB_PREFIX_.
Si el prefijo es ps_, la tabla será ps_employee. Si el prefijo es abc_, será abc_employee. Parece una minucia, pero en bases de datos compartidas puede ser la diferencia entre arreglar su tienda y tocar otra cosa con cara de “yo no he sido”.
2. Localice el empleado administrador
Desde phpMyAdmin o su herramienta de base de datos, ejecute una consulta como esta, cambiando el prefijo si corresponde:
SELECT id_employee, firstname, lastname, email, active, id_profile, last_passwd_gen FROM ps_employee ORDER BY id_employee ASC;
Busque el email del superadministrador. Si no está seguro de qué perfil es el de superadministrador, revise los perfiles:
SELECT p.id_profile, pl.name FROM ps_profile p LEFT JOIN ps_profile_lang pl ON p.id_profile = pl.id_profile ORDER BY p.id_profile ASC;
En muchas tiendas, id_profile = 1 corresponde a SuperAdmin. Pero insisto: verifique. En una instalación con años, migraciones, traducciones y módulos administrativos, lo obvio a veces se comporta como un gato: aparece donde quiere.
3. Active el empleado si está deshabilitado
Si el usuario existe pero está inactivo, puede activarlo:
UPDATE ps_employee SET active = 1 WHERE email = '[email protected]';
Esto no cambia la contraseña, pero evita un bloqueo silencioso: introducir la clave correcta y no poder entrar porque el empleado está desactivado. Pocas cosas irritan tanto como una puerta cerrada con la llave puesta.
4. Cambie temporalmente el email del administrador
Si el problema es que el email antiguo ya no existe, puede actualizarlo y luego usar la recuperación normal del Back Office:
UPDATE ps_employee SET email = '[email protected]' WHERE email = '[email protected]';
Después vaya al formulario de “He olvidado mi contraseña” y solicite el enlace al nuevo correo. Este método evita manipular directamente el hash de la contraseña, por lo que suele ser más seguro y compatible entre versiones.
Método 3: restablecer la contraseña con un script PHP seguro 🧩
Si no puede usar el correo de recuperación, el método más recomendable suele ser ejecutar un pequeño script dentro de la propia instalación de PrestaShop. ¿Por qué? Porque permite utilizar las funciones internas de la plataforma para generar el hash correcto de la contraseña. No obliga a adivinar si su tienda usa MD5, bcrypt, hashing legacy, compatibilidad de migración o algún matiz de versión.
Es la diferencia entre copiar una llave a ojo y pedirle al cerrajero original que la fabrique. Menos épica, mucho más fiable.
Medidas de seguridad para este script:
- Use una contraseña temporal fuerte.
- Nombre el archivo con algo difícil de adivinar, por ejemplo
reset-admin-8f41x.php. - Suba el archivo solo el tiempo imprescindible.
- Si puede, restrinja el acceso por IP desde el servidor o mediante
.htaccess. - Elimine el archivo inmediatamente después de usarlo.
- No lo deje en una carpeta pública “por si acaso”. Ese “por si acaso” es donde nacen muchos incidentes.
Script recomendado
Cree un archivo PHP en la raíz de PrestaShop, junto a carpetas como classes, config, modules y themes. Ajuste el email y la nueva contraseña:
<?php require_once __DIR__ . '/config/config.inc.php'; $email = '[email protected]'; $newPassword = 'Cambia-Esta-Clave-Temporal-!2025'; $idEmployee = (int) Db::getInstance()->getValue( 'SELECT id_employee FROM `' . _DB_PREFIX_ . 'employee` WHERE email = "' . pSQL($email) . '"' ); if (!$idEmployee) { die('No se encontró ningún empleado con ese email.'); } $employee = new Employee($idEmployee); if (!Validate::isLoadedObject($employee)) { die('No se pudo cargar el empleado.'); } if (method_exists('Tools', 'hash')) { $employee->passwd = Tools::hash($newPassword); } else { $employee->passwd = md5(_COOKIE_KEY_ . $newPassword); } $employee->active = 1; $employee->last_passwd_gen = date('Y-m-d H:i:s', strtotime('-1 day')); if ($employee->update()) { echo 'Contraseña actualizada correctamente. Elimine este archivo ahora mismo.'; } else { echo 'No se pudo actualizar la contraseña.'; }
Después acceda al archivo desde el navegador:
https://tudominio.com/reset-admin-8f41x.php
Si el script muestra que la contraseña se actualizó correctamente, entre al Back Office con el email indicado y la contraseña temporal. Luego, desde el perfil del empleado, cambie esa contraseña por una definitiva y robusta.
No olvide eliminar el script. No “más tarde”, no “cuando termine el café”, no “mañana”. Ahora. Un archivo de restablecimiento abandonado en producción es una invitación escrita en letras luminosas.
Por qué este método es mejor que pegar un hash manualmente
Porque PrestaShop no ha usado siempre el mismo sistema de cifrado de contraseñas. Las versiones antiguas y modernas pueden comportarse de forma distinta. Además, una tienda actualizada desde PrestaShop 1.6 a 1.7 u 8 puede arrastrar compatibilidades internas. El script aprovecha el propio núcleo de PrestaShop y reduce el margen de error.
También evita una práctica peligrosa: copiar consultas SQL encontradas en foros sin saber si corresponden a su versión. Internet está lleno de soluciones fosilizadas, útiles en su época, ahora algo peligrosas; como mapas de una ciudad antes de que construyeran autopistas encima.
Método 4: actualización SQL en instalaciones antiguas ⚙️
En PrestaShop antiguos, especialmente instalaciones 1.6 y algunas tiendas legacy, era habitual restablecer la contraseña actualizando el campo passwd con un hash basado en _COOKIE_KEY_. Este método debe usarse con prudencia y solo si sabe que aplica a su versión.
Primero localice la clave _COOKIE_KEY_. En PrestaShop 1.6 suele estar en:
config/settings.inc.php
Verá una línea parecida a esta:
define('_COOKIE_KEY_', 'una_clave_larga_y_unica_de_su_tienda');
Luego, en instalaciones antiguas compatibles con este esquema, podría actualizar la contraseña así:
UPDATE ps_employee
SET passwd = MD5('una_clave_larga_y_unica_de_su_tiendaNuevaContraseñaSegura123!')
WHERE email = '[email protected]';
Observe que no hay espacio entre la clave _COOKIE_KEY_ y la nueva contraseña. Aun así, este método no debería ser su primera opción en PrestaShop 1.7, 8 o instalaciones actualizadas, porque puede no generar el hash correcto. En esos casos, use el script PHP anterior o el sistema de recuperación por correo.
Regla práctica: si no está seguro de la versión exacta o del sistema de hashing que usa su tienda, no use MD5 manualmente. Genere la contraseña mediante PrestaShop.
Consideraciones en PrestaShop multitienda 🏬
En instalaciones con multitienda, recuperar la contraseña del superadministrador puede no bastar si el empleado no tiene asociación correcta con las tiendas. PrestaShop gestiona permisos y accesos teniendo en cuenta tiendas, grupos y perfiles. La contraseña abre la puerta, sí, pero quizá la puerta dé a un pasillo equivocado.
Revise si existe la tabla de relación entre empleados y tiendas, normalmente:
ps_employee_shop
Puede consultar las asociaciones existentes:
SELECT es.id_employee, e.email, es.id_shop, s.name FROM ps_employee_shop es INNER JOIN ps_employee e ON e.id_employee = es.id_employee INNER JOIN ps_shop s ON s.id_shop = es.id_shop WHERE e.email = '[email protected]';
Si el empleado no está asociado a ninguna tienda, podría tener problemas de acceso o visibilidad dentro del Back Office. En ese caso, conviene comparar con otro superadministrador existente o revisar la configuración desde base de datos con mucha cautela.
Para asociar un empleado a todas las tiendas existentes, una consulta orientativa sería:
INSERT IGNORE INTO ps_employee_shop (id_employee, id_shop) SELECT e.id_employee, s.id_shop FROM ps_employee e CROSS JOIN ps_shop s WHERE e.email = '[email protected]';
De nuevo: cambie el prefijo ps_ si su instalación usa otro. Y haga copia de seguridad. Las bases de datos no perdonan el entusiasmo.
Errores frecuentes al recuperar una contraseña de administrador PrestaShop 🚧
1. La nueva contraseña no funciona
Puede ocurrir por varias razones:
- Se usó un hash incompatible con la versión de PrestaShop.
- Se copió mal el valor de
_COOKIE_KEY_. - Se olvidó cambiar el prefijo de tabla en la consulta SQL.
- El empleado está inactivo.
- El perfil del empleado no tiene permisos suficientes.
- Hay caché o sesiones antiguas interfiriendo, aunque esto no suele ser lo principal.
Solución recomendada: use el script PHP basado en las funciones internas de PrestaShop y confirme que active = 1.
2. No existe ningún empleado con ese email
Quizá está usando un correo antiguo, una cuenta eliminada o una instalación clonada donde los datos cambiaron. Liste los empleados:
SELECT id_employee, firstname, lastname, email, active, id_profile FROM ps_employee;
Si no hay ningún superadministrador válido, puede ser necesario crear uno desde código o duplicar cuidadosamente un empleado existente y asignarle el perfil correcto. Sin embargo, crear empleados directamente por SQL puede dejar campos incompletos. Es preferible cargar el núcleo de PrestaShop y crear el objeto mediante sus clases internas.
3. El enlace de recuperación dice que expiró
PrestaShop usa tokens de recuperación con validez temporal. Si el enlace expiró, solicite uno nuevo. Si no llega, revise la configuración de correo o cambie temporalmente el email desde la base de datos.
4. Aparece una página en blanco al ejecutar el script
Una página en blanco suele indicar un error PHP oculto. Active temporalmente el modo debug si sabe lo que hace, revise los logs del servidor o ejecute el script desde consola. En PrestaShop moderno, el modo debug puede activarse en archivos de configuración, aunque no conviene dejarlo activo en producción.
También puede añadir estas líneas al principio del script durante la prueba:
ini_set('display_errors', 1);
error_reporting(E_ALL);
Retírelas después. Mostrar errores en producción es como discutir asuntos privados con un megáfono en la plaza.
5. El Back Office carga, pero no permite entrar
Revise:
- Que está usando la URL correcta del Back Office.
- Que el empleado está activo.
- Que el perfil tiene permisos.
- Que la contraseña fue generada con el método correcto.
- Que no hay reglas de seguridad del servidor bloqueando la sesión.
- Que el navegador acepta cookies.
- Que la fecha y hora del servidor son correctas.
Qué hacer después de recuperar el acceso 🛡️
Recuperar la contraseña es solo la mitad del trabajo. La otra mitad, menos visible pero más importante, consiste en averiguar por qué se perdió el acceso y asegurarse de que nadie más aprovechó la situación. En seguridad, celebrar demasiado pronto es una costumbre carísima.
1. Cambie la contraseña temporal por una definitiva
Use una contraseña larga, única y aleatoria. Mejor una frase generada por un gestor de contraseñas que una ocurrencia memorable. Lo memorable para usted puede ser deducible para otros. La contraseña ideal debería parecerse a un bosque denso: difícil de atravesar, sin caminos obvios.
- Mínimo recomendable: 14-16 caracteres.
- Combine letras, números y símbolos.
- No reutilice contraseñas de correo, hosting, FTP o WordPress.
- Guárdela en un gestor de contraseñas profesional.
2. Elimine archivos temporales
Si subió un script de restablecimiento, elimínelo inmediatamente. Compruebe también que no quedó una copia con extensión diferente, por ejemplo .bak, .txt o .old. Los atacantes automatizados buscan precisamente ese tipo de descuidos.
3. Revise empleados y permisos
Desde el Back Office, revise todos los empleados:
- Desactive cuentas antiguas.
- Elimine usuarios desconocidos.
- Reduzca permisos innecesarios.
- No use una única cuenta compartida para todo el equipo.
- Asigne perfiles según responsabilidades reales.
La administración de permisos es una forma de higiene. No luce mucho, nadie la aplaude, pero evita infecciones.
4. Compruebe módulos, archivos y actualizaciones
Un bloqueo de acceso puede ser solo un olvido. O puede ser síntoma de algo peor. Revise:
- Versiones de PrestaShop, módulos y tema.
- Módulos desconocidos o instalados recientemente.
- Archivos modificados en fechas sospechosas.
- Registros de acceso del servidor.
- Errores en logs de PHP.
- Usuarios FTP, SFTP, SSH y panel de hosting.
PrestaShop, como cualquier plataforma de comercio electrónico, depende mucho de su ecosistema: módulos de pago, transportistas, conectores ERP, herramientas SEO, plantillas. Una tienda no se compromete siempre por la puerta principal; a veces entra el problema por un módulo abandonado, pequeño y polvoriento, como una rendija por donde se cuela el invierno.
5. Refuerce el acceso al Back Office
Algunas medidas recomendables:
- Use una URL de administración no evidente.
- Proteja el directorio del Back Office con autenticación adicional HTTP si su equipo puede gestionarlo.
- Restrinja el acceso por IP cuando sea viable.
- Instale una solución fiable de doble factor de autenticación si su versión o módulos lo permiten.
- Mantenga PHP en una versión soportada.
- Configure copias de seguridad automáticas y verificadas.
- Revise permisos de archivos y carpetas.
6. No rote _COOKIE_KEY_ a la ligera
Algunos administradores, al ver la importancia de _COOKIE_KEY_, piensan en cambiarla como quien cambia una cerradura. Cuidado. Esa clave participa en distintos mecanismos internos y modificarla sin planificación puede invalidar sesiones, afectar compatibilidades, provocar problemas con contraseñas antiguas o generar efectos secundarios difíciles de diagnosticar.
Si sospecha que _COOKIE_KEY_ fue expuesta, haga una evaluación completa, pruebe en un entorno de staging y consulte documentación específica para su versión de PrestaShop. Seguridad no es solo cerrar puertas; es saber qué paredes sostienen el techo.
Buenas prácticas para no volver a perder el acceso 📌
La mejor recuperación de contraseña es la que nunca hace falta. Suena a frase de manual, lo sé, pero algunas frases de manual sobreviven porque son ciertas.
- Use un gestor de contraseñas: 1Password, Bitwarden, KeePass, Dashlane u otra solución profesional.
- Documente accesos críticos: Back Office, hosting, base de datos, FTP/SFTP, SSH, proveedor de dominio y correo.
- Defina responsables: al menos dos personas autorizadas deberían saber cómo recuperar acceso en caso de emergencia.
- Evite cuentas compartidas: cada empleado debe tener su propio usuario.
- Configure correo transaccional fiable: SMTP autenticado, SPF, DKIM y DMARC correctamente establecidos.
- Pruebe las copias de seguridad: una copia que nunca se ha restaurado es una promesa, no una garantía.
- Revise accesos periódicamente: especialmente después de cambios de personal o proveedores.
Resumen rápido de métodos
| Situación | Método recomendado | Riesgo |
|---|---|---|
| Recuerda el email y el correo funciona | Usar “He olvidado mi contraseña” desde el Back Office | Bajo |
| El email antiguo ya no existe | Cambiar el email en ps_employee y solicitar recuperación |
Medio-bajo |
| No funciona el correo de recuperación | Usar script PHP con funciones internas de PrestaShop | Medio, si se elimina el script después |
| Instalación antigua de PrestaShop | Actualizar hash con _COOKIE_KEY_ solo si aplica |
Medio-alto si no se conoce la versión |
| Multitienda con problemas de permisos | Revisar ps_employee_shop y perfiles |
Medio |
Una última llave bajo la luz
Olvidar la contraseña de superadministrador en PrestaShop no es el fin de la tienda. Es un sobresalto, sí; una de esas escenas en las que el corazón golpea dos veces antes de que la cabeza empiece a trabajar. Pero con acceso al servidor, a la base de datos o al sistema de archivos, hay caminos razonables para recuperar el control.
El orden importa: primero el método oficial por correo; después, si hace falta, el cambio de email en base de datos; luego el script que usa el propio núcleo de PrestaShop; y solo en instalaciones antiguas, con plena conciencia, la actualización manual del hash. Lo rápido y lo correcto no siempre son enemigos, pero cuando lo son, conviene elegir lo correcto. La prisa arregla contraseñas; la prudencia salva tiendas.
Y cuando vuelva a entrar al Back Office, no cierre simplemente la pestaña con alivio. Revise usuarios, permisos, módulos, logs y copias de seguridad. Una contraseña recuperada es una puerta abierta de nuevo; una tienda asegurada es una casa donde se puede dormir tranquilo. 🔐✨