randomizex
@randomizex
http://resume.web-ivan.ru

После смены пароля через CUser::Update вход по CUser::Login на 20 минут перестает работать. Что делать?

В проекте делали кастомную авторизацию сами.
надо было дать пользователю возможность на выбор авторизовываться и менять пароль по (email/phone) и наткнулись на следующую проблему:
При смене пароля на новый методом CUser::Update

$obUser = new \CUser();
$obUser->Update($user['ID'], ["PASSWORD" => $password, 'CONFIRM_CODE' => '', 'ACTIVE' => "Y"]);

в таблице b_user_auth_action создается запись на этого пользователя с текущем временем (ACTION = logout ACTION_DATE= текущее время)
видимо пока от данного времени не пройдет определенный промежуток указанный где то в настройках
функция входа в систему CUser::Login ведет себя странным образом:
При не верных данных логин/пароль она отдает ошибку что данные введены не верно а при верных отдает результат что пользователь удачно авторизован НО самой авторизации не происходит (по видимому в сессию не записываются данные или куки не создаются)

Решил следующем образом:
просто при смене пароля очищаю данные по данному пользователю в данной таблице
UserAuthActionTable::deleteByFilter(['USER_ID'=>$user['ID']]);

Надеюсь меня тут поругают и ответят как надо было побороть эту проблему.
  • Вопрос задан
  • 1630 просмотров
Решения вопроса 1
s_panteleev
@s_panteleev
25 yo, Yaroslavl
Как уже написали выше, передавайте CONFIRM_PASSWORD
и добавьте третий параметр CUser::Update($id, $fields, false) – это отключит добавление записи в AuthAction

Документация
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
gromdron
@gromdron
Работаю с Bitrix24
Надеюсь меня тут поругают и ответят как надо было побороть эту проблему.


Конечно поругают: вы ведь делаете кривой велосипед, вместо того чтобы взять и использовать штатную CUser::ChangePassword (ее описание в API).

Если уж хотите изобретать собственные велосипеды, то хотя бы изучите как работает стандарт, а потом уже изобретайте свое.
Ответ написан
Комментировать
serginhold
@serginhold
где-то есть в документации CONFIRM_CODE ?
там вроде как CONFIRM_PASSWORD, и передавать нужно тоже самое что и в PASSWORD
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы