it-blog.club
Битрикс авторизует и разлогинивает

Битрикс авторизует и разлогинивает

Была значит у нас с коллегами старая проблемка на одном сайте. Решали мы её очень долго, так как не могли понять в каком месте у нас ошибка. Для наглядности приведу ниже псевдокод.


global $USER;
$arUser = CUser::GetList(($by = "ID"), ($order = "desc"),["PERSONAL_PHONE" => "+79999999999"])->GetNext();
$USER->Update($arUser['ID'],['PASSWORD'=>'qweqwe']);
$USER->Authorize($arUser['ID']);

Думаю пример понят. Получаем ID по фильтр, меняем пароль, авторизуем.

Так вот проблема была в том, что после смены пароля, авторизация проходила и сразу сбрасывалась.

Заходим мы, значит, в настройки Журнала событий и включаем отслеживание Смены пароля, Авторизации и Выхода.

Запускаем скрипт ещё раз. Видим в Журнале: Пароль поменен, Успешно авторизован и в эту же секунду, Успешно вышел.

Перебрали пол сайта, думали, может ниже чего мешает. Нет.

Перебрали конфиги сервера, думая, что может с проксёй чего не то или ещё чё. Ну куки там, сессии. Нет всё норм.

При этом. Заходишь на сайт с нового компьютера в первый раз, запускаешь скрипт всё ОК. Разлогиниваешься. Запускаешь второй раз. Уже не ОК. Ну точно проблема в сессии или куках, думали мои и головной и спиной мозг. Но нет! Всё отлично.

В итоге времени ушло реально много. Перебрали все варианты и уже от отчаянья написали в ТХ самого Битрикс. Спустя 5 дней (3 дня не считая выходных) нам ответили.

Ура!!! Как нам объяснили, в одном из недавних релизов обновлений, либо что-то поломалось, либо что-то добавилось. "Короче, вот вам метод, вызовите его там то и всё норм будет" - Сказал нам специалист на той стороне. Пообещал кстати, что добавят это в документацию, только вот где были 1.5 месяца назад, это хороший вопрос.

В итоге. Если кто-то столкнулся с такой проблемой. Что битрикс не может авторизовать пользователя после смены пароля. Или битрикс авторизует пользователя и сразу сбрасывает авторизацию, а ты уже вырвал все волосы на своей голове и принялся за подмышки. Для начала не паникуй. Ниже я привёл спасательный код. Не факт, что у тебя ситуация как произошла у нас, но может поможет.

Вызови метод $USER->CheckAuthActions(); после Authorize() или Login()

ВСЁ! Это было всё решение!


global $USER;
$arUser = CUser::GetList(($by = "ID"), ($order = "desc"),["PERSONAL_PHONE" => "+79999999999"])->GetNext();
$USER->Update($arUser['ID'],['PASSWORD'=>'qweqwe']);
$USER->Authorize($arUser['ID']);
$USER->CheckAuthActions();


Проблема решена. Всё работает. Всем спасибо!


it-blog.club 142
Автор: Ярослав Хмель


Если Вам понравилась статья, то можете поддержать блог переведя N сумму на кофе авторам или оплату хостинга!
В любом случае спасибо! А так же не забывайте про группу в ВК
ПОИСК ПО САЙТУ
Поддержать