Разработка

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

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

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

 Самый стандартный способ сделать это программно — использовать метод `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. Если пользователь найден:


	<li>Генерируется или находится существующий неистекший код подтверждения.

	- Этот код сохраняется в базе данных пользователя.

	- На 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 любым именем:<?

require($_SERVER[‘DOCUMENT_ROOT’].”/bitrix/header.php”); echo $USER->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/имя сайта/...` и откройте его в браузере.

- Зайдите на сайт (при этом ни логин, ни пароль не будут запрашиваться), и в административном разделе для своей учетной записи установите пароль.

Внимание! Обязательно удалите залитый файл со скриптом после восстановления пароля!