Вопрос: В "Битрикс: Управление сайтом" (БУС) нет прямого API для изменения даты последней авторизации пользователя. Это так или есть возможность изменить дату без использования SQL запроса?

Кратко: в стандартном API «Битрикс: Управление сайтом» действительно нет документированного метода, который бы позволял в явном виде поменять дату последней авторизации пользователя на произвольную. Обычно это поле (LAST_LOGIN
) обновляется системой автоматически в момент входа пользователя.
Можно ли «исхитриться» и передать LAST_LOGIN
через CUser::Update
?
- В большинстве случаев это поле защищено от явного изменения, и система либо игнорирует его, либо перезаписывает актуальной датой авторизации при реальном логине.
- Документация Битрикс не описывает вариант принудительного изменения даты последней авторизации с помощью
CUser::Update()
. Формально, вы можете попробовать передать вUpdate()
массив с ключомLAST_LOGIN
, но нередко это либо не сработает, либо может привести к непредвиденным результатам в будущем (например, сбои в отчетности или статистике).
Что остаётся?
- Прямое обновление таблицы
b_user
через SQL-запрос. Это надёжный, но «грубый» путь — вы напрямую меняете значение поляLAST_LOGIN
в базе данных. Нужно понимать, что:- Любые прямые манипуляции с таблицами Битрикс не рекомендуются без крайних причин.
- При следующих реальных авторизациях система снова будет проставлять свою дату.
- Симуляция «псевдо-логина» (самописный скрипт, который авторизует пользователя с нужной датой через имитацию логина). Однако:
- Дату «из прошлого» таким способом задать не выйдет, так как она проставляется текущим временем.
- Можно лишь сохранить реальное текущее время, если система по каким-то причинам его не проставила.
- Собственный обработчик (хук) на события авторизации — но, повторюсь, это не даёт возможности прописать «прошедшую» дату. Событие вызывается в момент входа и подставляет реальную текущую метку времени.
Итог
- Официального (документированного) API для установки произвольной даты последней авторизации в БУС нет.
- Единственный гарантированный способ — это прямое обновление в базе (поле
LAST_LOGIN
в таблицеb_user
). Будьте осторожны, так как это может повлиять на отчёты, модули статистики и прочие внутренние механизмы, использующие поле последней авторизации.
Пример подобного SQL запроса
UPDATE b_user
SET LAST_LOGIN = '2023-10-01 12:00:00'
WHERE ID = USER_ID;