Как проверить USER_CHECKWORD
В базе данных у пользователей есть поле CHECKWORD, но оно не равно той строке, что отправляется пользователю на почту для восстановления пароля. Для проверки нужно провести небольшие манипуляции.
Для старой версии ядра: нужно взять поле CHECKWORD пользователя, вырезать оттуда первые 8 символов и присыпать ими USER_CHECKWORD :)
Для новой версии (примерно с 20.5) есть отдельный метод Password::equals. Пример кода ниже:
$userCheckword = htmlspecialcharsbx($_REQUEST['USER_CHECKWORD']); $dbUser = CUser::GetList(($by="personal_country"), ($order="desc"), array('LOGIN' => htmlspecialcharsbx($_REQUEST['USER_LOGIN']))); if ($arUser = $dbUser->fetch()){ // данные пользователя по логину // Новая версия ядра $res = \Bitrix\Main\Security\Password::equals($arUser["CHECKWORD"], $userCheckword); // Старая версия ядра // $salt = substr($arUser["CHECKWORD"], 0, 8); // соль // $res = $arUser["CHECKWORD"] === $salt.md5($salt.$userCheckword) if ($res) { // сравнение строки из письма со строкой в БД return true; } else { return false; } } else { return false; }
Кстати, метод \Bitrix\Main\UserTable::getList не возвращает поле CHECKWORD. Поковыряться в исходниках можно тут /bitrix/modules/main/classes/general/user метод ChangePassword
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.