Перейти к содержимому

Забыт пароль и потерян доступ в админку - что делать

Возвращаем доступ, когда пароль забыт, письмо восстановления не приходит, а единственный администратор недоступен.

Решение

Находим учётную запись и смотрим её состояние:

$res = CUser::GetList('ID', 'ASC', ['LOGIN' => 'admin', 'ACTIVE' => 'Y'],
['SELECT' => ['UF_*'], 'FIELDS' => ['ID', 'LOGIN', 'EMAIL', 'ACTIVE', 'BLOCKED', 'LAST_LOGIN']]);
while ($u = $res->Fetch()) {
printf("%d %-20s %-28s активен=%s блок=%s вход=%s\n",
$u['ID'], $u['LOGIN'], $u['EMAIL'], $u['ACTIVE'], $u['BLOCKED'] ?: 'N', $u['LAST_LOGIN']);
}
// пустой результат означает, что логин другой либо запись выключена

Проверка начинается с состояния записи, а не с пароля. Заблокированная или выключенная запись не пускает на сайт с любым паролем, и смена пароля в такой ситуации ничего не меняет.

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

$user = new CUser();
$ok = $user->Update($userId, [
'PASSWORD' => 'NovyyParol2026!', // требования к длине заданы в настройках
'CONFIRM_PASSWORD' => 'NovyyParol2026!', // без подтверждения правка отклоняется
]);
echo $ok ? "пароль изменён\n" : $user->LAST_ERROR;

Оба поля обязательны: без подтверждения правка молча отклоняется. Файл со скриптом кладут в корень сайта, подключают пролог и удаляют сразу после выполнения, иначе он остаётся доступным по прямой ссылке.

Разбираемся, почему не приходит письмо восстановления:

$res = CEventMessage::GetList([], ['EVENT_NAME' => 'USER_PASS_REQUEST', 'ACTIVE' => 'Y']);
while ($m = $res->Fetch()) {
printf("шаблон=%d сайт=%s от=%s\n", $m['ID'], $m['LID'], $m['EMAIL_FROM']);
}
// пустой список означает выключенный или удалённый шаблон письма
CUser::SendPassword('admin', 'admin@example.com'); // запускает штатное восстановление

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

Возвращаем доступ в административную часть:

global $APPLICATION;
$APPLICATION->SetGroupRight('main', 5, 'W'); // доступ группы 5 в админраздел
$user = new CUser();
$user->Update($userId, ['GROUP_ID' => [1, 5]]); // группа 1 - полные права

Вход в админраздел даёт не пароль, а право группы на модуль ядра. Пользователь с верным паролем и без этого права авторизуется на сайте, но в административной части получает отказ.

Завершаем чужие сохранённые сессии:

$conn = \Bitrix\Main\Application::getConnection();
$conn->query('DELETE FROM b_user_stored_auth WHERE USER_ID = ' . (int)$userId);
// запомненный вход живёт отдельно от сессии и переживает смену пароля

Запомненный вход хранится отдельной записью и переживает смену пароля. Пока эта запись цела, старый браузер продолжает заходить под учётной записью, у которой пароль уже другой.

Смена пароля через правку базы напрямую остаётся крайней мерой. Свёртка пароля считается вместе со служебной солью, и запись, собранная вручную неверно, делает вход невозможным даже с правильной строкой.

Учётную запись единственного администратора стоит завести заранее второй. Восстановление через хостинг и правку базы занимает часы, а вторая запись с полными правами решает вопрос за минуту.

Типичные проблемы

Пароль изменён, войти всё равно не удаётся.

Запись выключена или заблокирована после неудачных попыток. Состояние проверяют полями активности и блокировки.

Форма восстановления отвечает успехом, письма нет.

Шаблон почтового события выключен либо почта не уходит с сервера. Ответ формы не зависит от факта отправки.

Правка пароля не сохраняется без ошибки.

Не передано подтверждение пароля либо он короче требований. Причину печатает свойство ошибки объекта.

Вход на сайт работает, админка выдаёт отказ.

У группы нет права на модуль ядра. Доступ в административную часть выдаётся отдельно от авторизации.

После смены пароля старый браузер остаётся внутри.

Запомненный вход хранится отдельной записью. Её удаляют вручную, если нужно выкинуть все устройства.

Частые вопросы

Можно ли посмотреть пароль пользователя?

Нет, в базе лежит его свёртка, а не сам пароль. Восстановить исходную строку нельзя, её только меняют на новую.

Как сменить пароль, если сайт не открывается вовсе?

Скриптом в корне с подключением пролога либо правкой свёртки в базе. Первый способ безопаснее и работает при живом ядре.

Почему после нескольких попыток форма требует картинку?

Сработала защита от подбора. Она включается по числу неудачных попыток и снимается по времени или сбросом в настройках.

Что делать, если администратор уволился?

Сменить ему пароль либо выключить запись и завести новую с полными правами. Удаление записи ломает историю правок и заказов.

Смежное

Первоисточник