Главная » API Битрикс » CUser » CUser::SendPassword — восстановление пароля в Битрикс

CUser::SendPassword — восстановление пароля в Битрикс

Схема восстановления пароля в Битрикс: SendPassword отправляет временную ссылку на почту пользователя

CUser::SendPassword запускает штатный сценарий восстановления пароля: генерирует ссылку с ограниченным сроком действия и отправляет её на почту пользователя. Разберём, как вызвать его вручную, и какие настройки влияют на то, что получит пользователь.

Базовый вызов

<?php

$user = new CUser;

$result = $user->SendPassword([
    'LOGIN' => 'ivan_petrov',
    'EMAIL' => '',
]);

if ($result) {
    echo 'Письмо отправлено';
} else {
    echo 'Ошибка: ' . $user->LAST_ERROR;
}

Метод принимает либо логин, либо email — достаточно одного из них, система сама найдёт соответствующего пользователя. Если найдено несколько пользователей с одинаковым email, потребуется указать логин для однозначного выбора.

Что происходит при вызове

  1. Система находит пользователя по переданным данным.
  2. Генерируется временная ссылка со специальным кодом подтверждения.
  3. Отправляется письмо по почтовому событию восстановления пароля.
  4. Пользователь переходит по ссылке и задаёт новый пароль на странице подтверждения.

Сама смена пароля происходит не в момент вызова SendPassword, а позже — когда пользователь перейдёт по ссылке и подтвердит новое значение. До этого момента старый пароль продолжает действовать.

Нужна помощь с Битрикс?





    Настройка письма

    Текст письма определяется почтовым шаблоном соответствующего события — тем же механизмом, что и остальные системные уведомления. Оформление и переменные, доступные в шаблоне, настраиваются в разделе Сервисы → Почтовые события → Шаблоны, где для события восстановления пароля доступна переменная со ссылкой подтверждения.

    Срок действия ссылки

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

    Программный вызов из своей формы

    Если восстановление пароля инициируется не штатной формой, а собственной логикой — например, из личного кабинета CRM-интеграции, — метод вызывается напрямую, а результат обрабатывается для показа пользователю понятного сообщения:

    <?php
    
    $user = new CUser;
    $email = $_POST['email'] ?? '';
    
    if (empty($email)) {
        $error = 'Укажите email';
    } else {
        $result = $user->SendPassword(['EMAIL' => $email]);
    
        if ($result) {
            $message = 'Проверьте почту — мы отправили ссылку для восстановления';
        } else {
            // не раскрываем, существует ли такой email в базе
            $message = 'Если такой адрес зарегистрирован, письмо уже отправлено';
        }
    }

    Обратите внимание на формулировку сообщения при ошибке: одинаковый ответ независимо от того, найден пользователь или нет, — стандартная практика безопасности. Она не позволяет злоумышленнику перебором email-адресов выяснить, какие из них зарегистрированы на сайте.

    Ограничение частоты запросов

    Штатный механизм восстановления пароля стоит защитить от массовых автоматических запросов — иначе форма превращается в инструмент для рассылки спама на произвольные адреса под видом писем восстановления. Ограничение частоты обычно реализуется на уровне формы: капчей или лимитом запросов с одного IP-адреса за период времени.

    Частые ошибки

    • Ответ раскрывает, найден ли пользователь. Разные сообщения для «есть такой email» и «нет такого» — подсказка для перебора.
    • Нет ограничения на частоту запросов. Форма восстановления используется для спам-рассылки.
    • Слишком долгий срок действия ссылки. Повышает риск компрометации через старое, забытое письмо.
    • Не проверяется результат вызова. Пользователь не получает обратной связи о том, отправлено письмо или нет.

    Итог

    CUser::SendPassword запускает штатный сценарий восстановления: находит пользователя по логину или email, отправляет временную ссылку и не меняет пароль до подтверждения пользователем. При использовании в собственной форме важно не раскрывать в ответе, найден ли указанный адрес в базе, и защитить форму от автоматических массовых запросов.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний