Как известно, битрикс очень мощная система. И сложная. Настолько сложная, что разработчики порой забывали внедрить в
свое детище самые простые инструменты, а обычные по своей сути вещи усложняют до такой степени, что потом разобраться в том
, как они работают, просто не представляется возможным.
Короче я говорю сейчас о проблеме проверки пароля на соответствие некоторому значению.
Если коротко описать проблему, то пароль, как и во многих нормальных системах, храниться в виде некоторого хеша. Это хорошо.
Плохо в данной ситуации то, что хеш-функция тут не стандартная, а самописная, и следовательно нельзя просто взять и сравнить
обычные md5 от пароля заданного и пароля юзера. О API-функции для решения данной задачи разрабы, как я уже говорил выше,
не позаботились, а значит нам с вами придется все делать самому.
Слава богу мы не одни, кто задавался этой проблемой. Есть на свете человек по имени Шоков Алексей, который
благополучно разрешил данную проблему и выплеснул все свои наработки в виде статьи на форумах битрикса.
В этой статье все расписанно достаточно подробно, я же здесь приведу только итоговый код функции.
function isUserPassword($userId, $password) { $userData = CUser::GetByID($userId)->Fetch(); //Получаем пользователя $salt = substr($userData['PASSWORD'], 0, (strlen($userData['PASSWORD']) - 32)); //расчитываем соль $realPassword = substr($userData['PASSWORD'], -32); //хеш реального пароля $password = md5($salt.$password); //хеш пароля заданного return ($password == $realPassword); //проверяем }
Ничего сложного в функции нет, и это не удивительно, ведь в ней всего 5 строк. Но как хорошо что она все-таки есть.
Не забудьте подключить API битрикса, если будете делать проверку в кастомном скрипте.