Разработка

Пароль Битрикс

Пароль Битрикс

чтобы реализовать функционал “Забыли пароль” в Битрикс, вам нужно использовать встроенные методы ядра. Основная задача — вызвать функцию, которая сгенерирует уникальный код восстановления и отправит письмо пользователю.

Самый стандартный способ сделать это программно — использовать метод 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. Свяжитесь с нами, чтобы обсудить вашу задачу.

🚀 Нужна помощь с сайтом на 1С-Битрикс или Аспро?

Я работаю удалённо по всей России и СНГ. Узнайте цены и условия для вашего города:

Все регионы →