Почему в новых версиях MODX не работает сброс пароля через MD5 и как восстановить доступ в manager

Есть ситуация, с которой сталкиваются почти все, кто переносит сайты на MODX или восстанавливает их из бэкапа.

Вы заходите в /manager, вводите логин и пароль — и MODX просто не пускает.
Пароль “точно правильный”. Вы его только что поменяли в базе через MD5 — как советуют старые статьи и форумы.
Но входа нет.

Спокойно. В большинстве случаев MODX не “сломался” — просто вы применили устаревший способ.

Почему так происходит

В старых версиях MODX (Evo и ранние Revo) действительно хватало простой замены:

UPDATE modx_users
SET password = MD5('newpassword')
WHERE username = 'user';

Интернет до сих пор завален инструкциями 2010–2014 годов, где это подаётся как универсальное решение.

Проблема в том, что в современных версиях MODX авторизация — это не только поле password.

Теперь учитываются:

  • профиль пользователя (modx_user_attributes);
  • активность (active);
  • группы и роли;
  • корректная связка с контекстом manager;
  • логика хеширования (класс хеша, соль, кэш пароля).

В результате вы видите типичную картину:

  • пароль в базе есть;
  • но для MODX пользователь “некорректен” (или пароль проверяется иначе);
  • /manager не принимает вход.
  • Самая частая ошибка

Пытаться “починить” существующего пользователя вслепую:

  • менять password;
  • трогать salt;
  • очищать поля наугад;
  • удалять какие-то данные.
Иногда это срабатывает, но часто — даёт нестабильный результат: сегодня вошли, завтра снова нет.

Быстрый способ (если нужно срочно войти именно под этим пользователем)

Этот способ полезен, когда нужно войти прямо сейчас и у вас есть доступ к phpMyAdmin.

Выполните запрос (пример — для пользователя admin, пароль станет qwerty):
UPDATE modx_users
SET
  password = 'd8578edf8458ce06fbc5bb76a58c5ca4',
  hash_class = 'hashing.modMD5',
  salt = '',
  cachepwd = ''
WHERE username = 'admin';

После этого:

  • /manager
  • логин: admin
  • пароль: qwerty
⚠️ Важно: после входа сразу смените пароль в админке (чтобы MODX записал его в актуальном формате).

Почему мы вообще упоминаем MD5 — и почему он “старый”



MD5 давно считается устаревшим для хранения паролей:

  • он очень быстрый → легко перебирается при утечке базы;
  • не предназначен для защиты от брутфорса, в отличие от современных алгоритмов.
Поэтому MD5 не подходит как постоянное решение.

В этой статье он используется только как аварийный ключ на один вход: зайти → сменить пароль штатно → забыть.

Самый надёжный способ: создать нового администратора (рекомендуем при переносах и восстановлении)

Если задача — стабильно вернуть доступ и не гадать, “почему не пускает”, проще и безопаснее создать нового пользователя-администратора напрямую в базе.
Потом войти в админку и уже спокойно навести порядок.

Ниже — пошаговый вариант через phpMyAdmin.



Шаг 1. Определяем базу и префикс таблиц

Откройте файл:core/config/config.inc.php

  • Найдите:$dbase — имя базы данных
  • $table_prefix — префикс таблиц (не всегда modx_)

    ⚠️ Если у вас префикс другой — замените modx_ в запросах ниже на свой.

Шаг 2. Создаём пользователя

В phpMyAdmin → вкладка SQL:

INSERT INTO modx_users (username, password, active, class_key)
VALUES ('my_admin', MD5('MyStrongPass123!'), 1, 'modUser')
ON DUPLICATE KEY UPDATE
  password = MD5('MyStrongPass123!'),
  active = 1;

Это создаст (или активирует) пользователя my_admin.

Шаг 3. Создаём профиль пользователя (обязательно)

Без записи в modx_user_attributes MODX может вести себя некорректно.

INSERT INTO modx_user_attributes (internalKey, fullname, email)
SELECT u.id, 'Temp Admin', ''
FROM modx_users u
LEFT JOIN modx_user_attributes a ON a.internalKey = u.id
WHERE u.username = 'my_admin'
  AND a.internalKey IS NULL;


Шаг 4. Добавляем в группу администраторов

Сначала можно проверить, как называется группа:

SELECT id, name FROM modx_user_groups;

Обычно это Administrator или Administrators.

Добавляем пользователя:
INSERT INTO modx_member_groups (member, user_group, role)
SELECT u.id, g.id, 2
FROM modx_users u
JOIN modx_user_groups g ON g.name IN ('Administrator','Administrators')
LEFT JOIN modx_member_groups mg
  ON mg.member = u.id AND mg.user_group = g.id
WHERE u.username = 'my_admin'
  AND mg.member IS NULL;


Шаг 5. Вход в админку

Пробуем войти:

  • /manager
  • логин: my_admin
  • пароль: MyStrongPass123!
  • После входа: смените пароль на свой;
при необходимости удалите временного пользователя (или оставьте как запасной, но с хорошим паролем и ограничениями).

Если не сработало — проверьте эти 4 пункта

  • Префикс таблиц корректный
  • Пользователь активен (active = 1)
  • Есть запись в modx_user_attributes
  • Пользователь добавлен в группу Administrator / Administrators

Дополнительно (по ситуации):



  • очистите кеш MODX (core/cache/*)

Итог:



  • Простая замена password = MD5(...) — больше не “универсальное решение” для современных MODX.
  • Старые инструкции часто вводят в заблуждение.
  • Для срочного входа есть быстрый аварийный вариант (MD5 + правильные поля).
  • Самый стабильный путь при переносах и восстановлении — корректно создать нового администратора в базе.
  • Этот подход регулярно выручает при переносах, восстановлении сайтов и работе с бэкапами.
Юрий
26 декабря 2025, 23:45
modx.pro
162
+4

Комментарии: 2

ВитОс
Вчера в 03:00
0
Интернет до сих пор завален инструкциями 2010–2014 годов,
вы что в спутнике ищите
все работает нормально и не надо усложнять
В таблице *_users у пользователя значение в поле hash_class ставим hashing.modMD5, поля salt и cachepwd очищаем, а в поле password меняем значение на: d8578edf8458ce06fbc5bb76a58c5ca4
входим под поролем qwerty
протестил даже для интереса на тройке
    Юрий
    Вчера в 15:02
    0
    Ваш вариант с hash_class = hashing.modMD5 действительно рабочий — и именно поэтому он прямо описан в статье как быстрый аварийный способ.

    Но статья не про “как один раз зайти”, а про стабильное восстановление доступа при переносах и бэкапах.
    В реальности проблема часто не только в пароле, а в связке:

    • профиль пользователя,
    • группы и роли,
    • контекст manager.
    В таких случаях правка одного поля в *_users даёт непредсказуемый результат, поэтому создание нового администратора в базе — самый надёжный путь.
    Быстро зайти — да, ваш вариант.
    Гарантированно восстановить доступ — другой сценарий.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2