чтобы реализовать функционал “Забыли пароль” в Битрикс, вам нужно использовать встроенные методы ядра. Основная задача — вызвать функцию, которая сгенерирует уникальный код восстановления и отправит письмо пользователю.
Самый стандартный способ сделать это программно — использовать метод CUser::SendPassword().
Вот пример PHP-кода, который можно разместить на отдельной странице или внутри компонента. Этот код предполагает, что пользователь вводит свой логин или email в форму.
<?
// Подключаем необходимые части ядра Битрикс
// Если этот код вставляется в компонент или шаблон, эти строки, возможно, не нужны,
// так как ядро уже подключено. Для отдельного скрипта - обязательны.
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
// Проверяем, была ли отправлена форма методом POST
$message = ''; // Переменная для сообщений пользователю
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Получаем введенные пользователем данные (логин или email)
$login_or_email = trim($_POST['LOGIN_OR_EMAIL']);
if (empty($login_or_email))
{
$message = "Пожалуйста, введите ваш логин или email.";
}
else
{
// Используем глобальный объект $USER
global $USER;
// Вызываем метод отправки пароля
// CUser::SendPassword принимает два параметра: логин и email пользователя.
// Если пользователь ввел логин, передаем его в оба параметра.
// Если пользователь ввел email, передаем его в оба параметра.
// Битрикс сам определит пользователя по логину или email.
$result = $USER->SendPassword($login_or_email, $login_or_email);
if ($result)
{
// Успешно отправлено
$message = "Инструкции по восстановлению пароля отправлены на ваш email. Пожалуйста, проверьте почту.";
// Можно также перенаправить пользователя на другую страницу:
// LocalRedirect("/auth/password_sent.php");
// exit;
}
else
{
// Произошла ошибка. Получаем текст ошибки.
// Ошибки обычно хранятся в $USER->LAST_ERROR
$message = "Ошибка при отправке инструкций: " . $USER->LAST_ERROR;
// Типичные ошибки:
// - "Не найдено пользователя с указанным логином или e-mail"
// - Ошибка отправки почты
}
}
}
// --- Дальше идет HTML-часть страницы с формой и выводом сообщений ---
// Если это отдельный скрипт, подключаем шапку и футер Битрикс
// Если это в компоненте/шаблоне, шапка/футер уже есть.
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Восстановление пароля");
?>
# Восстановление пароля
<? if (!empty($message)): ?>
<?= $message; ?>
<? endif; ?>
<?
// Если сообщение об успехе было показано, форму можно скрыть
if (strpos($message, "отправлены на ваш email") === false):
?>
Пожалуйста, введите ваш логин или email, чтобы получить инструкции по сбросу пароля.
Логин или Email:
<? endif; // Конец условия скрытия формы после успеха ?>
<?
// Подключаем футер Битрикс
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>
Пояснения:
-
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");: Эта строка (илиrequire($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");для полноценной страницы) подключает ядро Битрикс, делая доступными его функции и классы, включаяCUser. -
$_SERVER['REQUEST_METHOD'] == 'POST': Проверяет, что запрос пришел методом POST, что обычно означает отправку формы. -
$_POST['LOGIN_OR_EMAIL']: Получает данные из поля ввода с именемLOGIN_OR_EMAIL. -
global $USER;: Объявляет использование глобального объекта текущего пользователя Битрикс, через который мы будем вызывать методSendPassword. -
$USER->SendPassword($login_or_email, $login_or_email);: Это основная функция. Она ищет пользователя по переданному логину или email. Если пользователь найден: -
Генерируется или находится существующий неистекший код подтверждения.
-
Этот код сохраняется в базе данных пользователя.
-
На email пользователя отправляется почтовое событие типа
USER_PASS_REQUEST. По умолчанию это письмо содержит ссылку вида/auth/?changepass=yes&confirm_code=...&login=.... -
Метод возвращает
trueпри успехе иfalseпри ошибке. -
$USER->LAST_ERROR: ЕслиSendPasswordвернулfalse, здесь будет содержаться текстовое описание причины ошибки (например, “Пользователь не найден”). -
HTML форма: Код включает простую HTML форму с полем
LOGIN_OR_EMAILи кнопкой отправки, которая отправляет данные на ту же страницу. -
Сообщения: Переменная
$messageиспользуется для вывода результата операции пользователю (успех или ошибка).
Где разместить этот код:
-
Создать новую страницу в структуре сайта (например,
/auth/forgot_password.php) и вставить туда этот код. Убедитесь, что у этой страницы правильно подключены шаблон и компоненты, или используйте полный вариант сheader.phpиfooter.phpкак в примере. -
Вставить его в шаблон или логику существующего компонента авторизации/регистрации, если вы его дорабатываете.
Важно:
-
Убедитесь, что в административной части Битрикс (Настройки -> Настройки продукта -> Почтовые события -> Типы почтовых событий и Шаблоны почтовых событий) существует тип события
USER_PASS_REQUESTи активен соответствующий шаблон письма с корректной ссылкой на страницу сброса пароля. По умолчанию они присутствуют. -
Страница, на которую ведет ссылка из письма (
/auth/index.phpили другая), должна иметь компонент авторизации, настроенный на обработку параметровchangepassиconfirm_code. Стандартный компонентbitrix:system.auth.formилиbitrix:system.auth.authorizeобычно умеет это делать.
Несомненно, администратор сайта должен обладать хорошей памятью. Особенно если сайтов много. И для каждого сайта свой пароль. И занимается администратор сайтами не одновременно, а периодически.
Но в какой-то момент может оказаться так, что один из паролей все-таки будет подзабыт, а других администраторов на сайте нет. В такой ситуации можно восстановить доступ администратору на сайт одним из нижеперечисленных способов.
Способ первый
-
Доступ восстанавливается для пользователя с ID=1 (т.к. это первый пользователь, зарегистрированный в системе, и в связи с этим обладающий правами администратора). Поэтому для начала вспомните, какой логин был у этого пользователя (по умолчанию устанавливается admin).
-
Далее сохраните следующий скрипт в php-файл c любым именем:Update(1,array("PASSWORD"=>'Bitrix*123456')); echo $USER->LAST_ERROR; require($_SERVER['DOCUMENT_ROOT']."/bitrix/footer.php"); ?>
-
Закачайте созданный скрипт через FTP в корневой каталог сайта
www/имя сайта/...и откройте его в браузере . После этого у пользователя с ID=1 (по умолчанию - администратор) установится пароль:Bitrix*123456
Примечание: В коробочной версии Битрикс24 файл со скриптом необходимо разместить в папке (например: www/имя портала/pub или другой), а не в корневой каталог.
- Теперь авторизуйтесь на сайте под прежним логином (см. п. 1) и стандартным паролем (см. п. 3). В панели управления установите свой новый пароль.
Если доступ для неавторизованных пользователей закрыт, то перед процедурой восстановления пароля надо поправить файл .access.php в корне сайта, заменив:
$PERM[”/”][""]=“D”; на:$PERM[”/”][""]=“R”;
Внимание! Обязательно удалите залитый файл со скриптом после восстановления пароля, а также верните все внесенные изменения!
Способ второй
- Cохраните следующий скрипт в php-файл c любым именем:<? require($_SERVER[“DOCUMENT_ROOT”].”/bitrix/modules/main/include/prolog_before.php”);
global $USER; $USER->Authorize(1);
require($_SERVER[“DOCUMENT_ROOT”].”/bitrix/modules/main/include/epilog_after.php”); ?>
-
Закачайте созданный скрипт через FTP в корневой каталог сайта
www/имя сайта/...и откройте его в браузере. -
Зайдите на сайт (при этом ни логин, ни пароль не будут запрашиваться), и в административном разделе для своей учетной записи установите пароль.
Внимание! Обязательно удалите залитый файл со скриптом после восстановления пароля!
Ищете надежного партнера по веб-разработке и автоматизации? Мы помогаем бизнесу расти с помощью современных технологий, автоматизации процессов и экспертного SEO. Свяжитесь с нами, чтобы обсудить вашу задачу.